1、opencv中常用filter2d來自定義卷積核,以實現卷積操作;其定義如下:
cv_exports_w voidfilter2d( inputarray src, // 輸入影象
outputarray dst, // 輸出影象,尺寸、通道數均與原圖相等
intddepth, // m目標影象的深度,如果沒有定義則保持與原圖一致;原影象和目標影象支援一下深度
src.depth() = cv_8u, ddepth = -1/cv_16s/cv_32f/cv_64f
src.depth() = cv_16u/cv_16s, ddepth = -1/cv_32f/cv_64f
src.depth() = cv_32f, ddepth = -1/cv_32f/cv_64f // r如果設定的值為 -1 ,則表示與輸入影象深度一樣
src.depth() = cv_64f, ddepth = -1/cv_64f // 可以發現目標影象僅支援與輸入影象相同或者比輸入影象更深的的模式
inputarray kernel, // 卷積核或者相關核,乙個單通道浮點型矩陣,因此如果處理的是多通道影象,則需要
// 先將輸入影象 split 成單通道影象,處理完之後再 merge 一下,即可
point anchor=point(-1,-1), // 卷積核的基準點(anchor),預設值為(-1,-1),即核的中心位置
// 基準點即核中與要處理的畫素重合的地方
doubledelta=0, // 儲存目標影象時可以新增到畫素中的值,預設值為 0
intbordertype=border_default ); // 對影象邊緣的處理,因為卷積時影象的邊緣無法處理,必須適當的放大
// 邊緣,才能夠進行處理,預設值表示對全部邊緣都進行處理
2、下面是乙個簡單的利用自定義的不斷變換的卷積核對影象進行處理
#include#includeusing namespace cv;
int main(int argc, char** argv)
char input_title = "input"; // 定義開創窗名稱
namedwindow(input_title, cv_window_autosize);
imshow(input_title, src);
//自定義卷積模糊
int c = 0;
int index = 0; // 控制核的變化
int ksize = 0;
while (index<7)
ksize = 4 + (index % 8) * 2; // 控制核變化的計算公式,自己也可以調整
mat kernel = mat::ones(size(ksize, ksize), cv_32f) / (float)(ksize * ksize); // ones() 生成乙個全1矩陣,(ksize*ksize)用來控制影象的亮度,
filter2d(src, dst, -1, kernel, point(-1, -1)); // 濾波操作
index++;
imshow("output_win", dst);
} //waitkey(0);
return 0;
}
opencv卷積運算函式filter2D
函式介紹 saturate cast 處理數值的溢位問題 引數 要處理的資料型別 cv saturate cast這裡將資料處理成uchar型別 小於0返回0 大於255返回255 0 引數 255返回引數 include cmainwindow.h include include include ...
filter2D實現矩陣掩碼操作
看到一篇文章寫得通俗易懂,記錄下來。在對數字影象進行處理時,我們一般都會在空間域 spatial domain 或者頻域 frequency domain 中進行。所謂 空間域 實際上指的是影象本身,在空間域上的操作常常是改變畫素點的值,也就是經過乙個對映 我們所做的變換,如濾波等 將原來的f x,...
函式map和filter 的使用
day1805051.py 立方和平方相加 1 2 2 2 10 2 def pow2 x,y return x y print sum map lambda x,y x y,range 1,10 range 1,10 def pow2 x return x 2 print sum map lamb...