基本opencv2處理方法(三) 基本濾波器

2021-07-15 05:57:57 字數 3672 閱讀 6872

濾波是影象處理中的乙個基本操作。濾波去除影象中的雜訊,提取感興趣的特徵,允許影象重取樣。

影象中的頻率和空域:空間域指用影象的灰度值來描述衣服影象,而頻域指用影象灰度值的變化來描述一幅影象。

低通濾波器和高通濾波器的概念是在頻率中產生的。低通濾波器指去除影象中的高頻成分,而高通濾波器指去除影象中的低頻成分。

blur(image,result,size(5,5));//模板大小 5*5

namedwindow("均值濾波");

imshow("均值濾波",result);

gaussianblur(image,result,size(7,7),1.5); 是sigma係數

namedwindow("高斯濾波");

imshow("高斯濾波",result);低通濾波器的效果是對影象進行模糊和平滑,減弱了物體邊緣可見的快速變化。它是一種線性濾波器,原理是與核進行卷積運算,此時的核是內定的。如果你需要自定義核,我們就可以使用filter2d指定 mask模板。

medianblur(image,result,5);// 5 是ksize

namedwindow("中值濾波");

imshow("中值濾波",result);

y方向可以這麼記:

下減上。 在模板中的第三行減去第一行,就是求導了。

x方向同理。右減左。

sobel(inputarray src, outputarray dst, int ddepth,int dx, int dy, int 

ksize=3,doublescale=1, double delta=0,int bordertype=border_default );

ddepth為影象型別,(dx,dy) = (1,0)為x方向導數,(dx,dy) = (0,1)為y方向導數。 scale和delta的作用是在對影象儲存前可以對影象進行縮放操作。

即為dst = dst*scale+delta;

示例**如下:

namedwindow("sobel濾波");

imshow("sobel濾波",sobel_x);

mat matlaplacian;

//laplacian(image,matlaplacian,cv_16s,3);或者直接cv_16s型別,這樣不需要進行轉變,但是此時計算的值會失去精度

matlaplacian = abs(matlaplacian);//二階導數肯定含有負數

matlaplacian.convertto(matlaplacian,cv_8u);

namedwindow("拉普拉斯");

imshow("拉普拉斯",matlaplacian);

sobel運算元和拉普拉斯變換可以進行邊緣檢測,但是這樣的二值邊緣影象有兩個缺點:第一,檢測到的邊緣過粗,這意味著難以實現物體的精確定位。第二,難以找到這樣的閾值,即能夠檢測到所有重要的邊緣,同時不至於包含過多次要的邊緣。

高斯濾波器的大小:第一步所用的平滑濾波器將會直接影響 canny 演算法的結果。opencv中沒有這個引數的設定,matlab中有。

threshold(image,bw,100,255,thresh_binary);//進行二值化

vector

> contours;

//可以進一步處理 移除過小或過大的輪廓

int cmin = 100;

int cmax = 1000;

vector

>::const_iterator itc = contours.begin();

while (itc!=contours.end())

else itc++;

}mat conresult(image.size(),cv_8u,scalar(255));

drawcontours(conresult,contours,-1,scalar(0),2);

namedwindow("輪廓");

imshow("輪廓",conresult);

//原始hough變換

}namedwindow("基本hough");

imshow("基本hough",image);

houghlines的計算效率比較低o(n*n*m),耗時較長,而且沒有檢測出直線的端點。概論霍夫直線檢測houghlinesp是乙個改進,不僅執行效率較高,而且能檢測到直線的兩個端點。

houghlinesp不是系統的進行掃瞄影象,而是隨機挑選畫素點,一旦累加器中某一項達到給定的最小值,那麼掃瞄沿著對應畫素並移除所有經過的畫素點。得到的是一條線段。會將一條直線(表示為x0,y0,x1,y1)放入vector中。

houghlinesp(result,lineshoughp,1,3.1415926/180,50,50,10);//最小投票為50(直線上的點不少於50),線條不短於50,間隙不小於10

for (size_t i =0;i0],i[1]),point(i[2],i[3]),scalar(255),3,cv_aa);

}namedwindow("概念hough");

imshow("概念hough",image);其實hough變換理論可以檢測任何可以使用引數表示的圖形,比如常用的還有hough圓檢測,類似。

vector

circles;

houghcircles(result,circles,cv_hough_gradient,

2,//累加器的解析度

50,//兩個圓之間的最小距離

200,//canny高閾值

100,//最小投票數

);

houghcircles整合了canny檢測和hough變換。

基本opencv2處理方法(二)

使用filter2d進行鄰域計算 void shape2d const mat image,mat result main函式呼叫 result.row 0 setto scalar 0 可以將result矩陣的第0行所有畫素全部設定為0。算術操作 opencv過載了很多操作符 你可以直接對它們進行...

opencv(2) 處理畫素值

opencv中使用mat資料型別表示影象,這是類似int float等傳統型別的一種opencv中定義的資料型別。opencv常見的資料型別 point 代表二維點,用於影象座標點。如point 20,80 scalar 表示4元素標量,常用於rgb顏色值,一般第四個引數用不到。畫素是由顏色空間或通...

struts2學習筆記 三 處理使用者輸入資訊

1.struts2處理使用者輸入資訊 1.1.領域物件 還記得之前在loginaction類中有如下的屬性嗎?private user user 在這裡暫時還沒有用到。後面會有所講解 現在可以說一下了,其實user和其他的基本型別是一樣的,只不過我們將其與前面的封裝屬性值分離開來了,當前這種稱為領域...