19 腐蝕erode、膨脹dilate 腐蝕和膨脹是針對圖像中的白色部分(高亮部分)而言的,不是黑色的。除了輸入輸出圖像外,還需傳入模板算子element,opencv中有三種可以選擇:矩形MORPH_RECT,交叉形MORPH_CROSS,橢圓形MORPH_ELLIPSE。Matlab中會有更多一點的模板。 例如: Mat element = getStructuringElement(MORPH_RECT,Size(15,15)); erode(srcImage,dstImage,element); imshow("腐蝕圖",dstImage); dilate(srcImage,dstImage,element); imshow("膨脹圖",dstImage); 20 開閉運算、形態學梯度、頂帽、黑帽 開運算是先腐蝕后膨脹的過程,開運算可以用來消除小物體,在纖細點處分離物體,並且在平滑較大物體的邊界的同時不明顯改變其面積。 閉運算是先膨脹后腐蝕的過程,能夠排除小型黑洞(黑色區域),也就是形成連通域。 形態學梯度是膨脹圖域腐蝕圖之差,可以用來保留物體的邊緣輪廓。 頂帽是原圖像與開運算的結果圖之差,頂帽操作往往用來分離比鄰近點亮一點的斑塊。在一幅圖像具有大幅的背景而微小物品比較有規律的情況下,可以使用頂帽運算進行背景提取。 黑帽是閉運算結果圖與原圖像之差,黑帽運算用來分離比鄰近點暗一些的斑塊。 21 漫水填充 漫水填充法是一種用特定的顏色填充連通區域,經常被用來標記或者分離圖像的一部分進行處理或分析。其實現函數是floodFill。 Rect ccomp; floodFill(srcImage,Point(50,300),Scalar(155,255,55),&ccomp,Scalar(20,20,20),Scalar(20,20,20)); imshow("漫水填充圖",srcImage); Point(50,300)是Point類型的,表示漫水填充的起始點;Scalar(155,255,55)表示像素點被染色的值,即在重繪去油像素的新值;&ccomp 是Rect*類型的,有默認值為0,用於設定floodfill函數將要重繪區域的最小邊界矩形區域;第五個參數Scalar(20,20,20)表示當前觀察像素值與其部件鄰域像素值或者待加入該部件的種子像素之間的亮度或顏色之負差的最大值;第六個參數Scalar(20,20,20)表示當前觀察像素值與其部件鄰域像素值或者待加入該部件的種子像素之間的亮度或顏色之正差的最大值; 22 圖像金字塔與圖片尺寸縮放 我們經常會將某種尺寸的圖像轉換為其他尺寸的圖像,如果要放大或縮小圖片的尺寸,opencv里有兩種方法: (1) resize函數 最直接 resize(srcImage,dstImage,Size(),0.5,0.5);//縮小為一半 imshow("縮放1/2圖",dstImage); resize(srcImage,dstImage,Size(),2,2);//放大2倍 imshow("放大2倍圖",dstImage); resize(srcImage,dstImage,Size(srcImage.cols*3,srcImage.rows*3));//放大3倍 imshow("放大3倍圖",dstImage); 上方所有例子的插值方式都是默認的線性插值LITER_LINEAR,還可選擇最近鄰插值INTER_NEAREST,區域插值INTER_AREA,三次樣條插值INTER_CUBIC,Lanczos插值INTER_LANCZOS4。 (2) pyrUp()、pyrDown()函數,即圖像金字塔的對圖像向上采樣和向下采樣操作函數。 一般有兩種類型的金字塔:1.高斯金字塔,向下采樣也就是尺寸縮小,實現函數為pyrUp;2.拉普拉斯金字塔,向上采樣,也就是圖像尺寸放大,實現函數為pyrDown。 與resize函數實現相似, pyrUp(srcImage,dstImage,Size(srcImage.cols*2,srcImage.rows*2));// 放大2倍 imshow("金字塔放大2倍圖",dstImage); pyrDown(srcImage,dstImage,Size(srcImage.cols/2,srcImage.rows/2));// 縮小2倍 imshow("金字塔縮小2倍圖",dstImage); 23 閾值化 閾值是最簡單的圖像分割方法,是基於圖像中物體與背景之間的灰度差異,且此分割屬於像素級的分割。閾值操作分為固定閾值操作threshold和自適應閾值操作adaptiveThreshold。Ps:threshold函數輸入圖像可以是8位也可以是32位,即可以是灰度圖也可以為彩色圖,但adaptiveThreshold輸入圖像必須是8位,即必須是灰度圖。 Mat imgGray; cvtColor(srcImage,dstImage,CV_BGR2GRAY); imshow("灰度圖.jpg",dstImage); imgGray = dstImage; //閾值化操作 threshold(srcImage,dstImage,100,255,3);//表示閾值的具體值,255表示閾值類型的最大值,3表示其閾值方式 imshow("固定閾值化圖像",dstImage); adaptiveThreshold(imgGray,dstImage,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,3,1);//3表示計算閾值大小的一個像素的領域尺寸,取值為3,5,7等。1表示減去平均或加權平均值后的常數值,通常為正數,少數情況下也可以為0或負數。 imshow("自適應閾值化圖像",dstImage); 24 霍夫變換 Hough 霍夫變換是圖像處理中的一種特征提取技術,霍夫變換運用兩個坐標空間之間的變換將在一個空間中具有相同形狀的曲線或者直線映射到另一個坐標空間的一個點上形成峰值,從而把檢測任意形狀的問題轉化為統計峰值問題。 霍夫線變換原理采用直線在極坐標表示情況下,由極徑和極角(r,theta)表示。![]()
![]()