首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

OpenCV 實戰:PS 濾鏡水波紋效果實現原理與代碼詳解

     編輯:關於C++

效果原理:極坐標正弦變換

水波紋效果通過像素座標重映射實現:以圖像中心為極坐標原點,根據像素到中心的距離 r0 計算位移量,模擬水波從中心向外擴散的視覺效果。

核心數學模型

int x1 = (int)new_x, y1 = (int)new_y;
float p = new_x - x1, q = new_y - y1;
// 邊界裁剪
x1 = clamp(x1, 0, width-2);
y1 = clamp(y1, 0, height-2);

// 雙線性插值公式
for (int k = 0; k < 3; ++k) {  // 三通道
    dst.at(y, x)[k] =
        (1-p)*(1-q)*src.at(y1,   x1)[k] +
        p*(1-q)*src.at(y1,   x1+1)[k] +
        (1-p)*q*src.at(y1+1, x1)[k] +
        p*q*src.at(y1+1, x1+1)[k];
}

完整處理流程

  1. 讀取圖像,創建同尺寸輸出矩陣。
  2. 遍歷每個像素,計算變換後的源坐標。
  3. 邊界保護 + 雙線性插值採樣。
  4. 輸出結果並保存。

效果展示

原圖

水波紋效果

參數調節指南

  • A(振幅):控制波紋高度,值越大扭曲越明顯。
  • B(頻率):控制波紋密度,值越大波紋越密集。
  • 可引入時間參數 t 實現動態水波動畫:sin(B*0.1*r0 + t)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved