morphologyEx函数
void?morphologyEx(InputArray?src, OutputArray?dst, int?op, InputArray?kernel, Point?anchor=Point(-1,-1), intiterations=1, int?borderType=BORDER_CONSTANT, const Scalar&?borderValue=morphologyDefaultBorderValue()?)
函數形式:
 
函數參數:
- 第一個參數,InputArray類型的src,輸入圖像,即源圖像,填Mat類的對象即可。圖像位深應該為以下五種之一:CV_8U, CV_16U,CV_16S, CV_32F 或CV_64F。
- 第二個參數,OutputArray類型的dst,即目標圖像,函數的輸出參數,需要和源圖片有一樣的尺寸和類型。
- 第三個參數,int類型的op,表示形態學運算的類型,可以是如下之一的標識符:
- MORPH_OPEN – 開運算(Opening operation)
- MORPH_CLOSE – 閉運算(Closing operation)
- MORPH_GRADIENT -形態學梯度(Morphological gradient)
- MORPH_TOPHAT - “頂帽”(“Top hat”)
- MORPH_BLACKHAT - “黑帽”(“Black hat“)
 
另有CV版本的標識符也可選擇,如CV_MOP_CLOSE,CV_MOP_GRADIENT,CV_MOP_TOPHAT,CV_MOP_BLACKHAT,這應該是OpenCV1.0系列版本遺留下來的標識符,和上面的“MORPH_OPEN”一樣的效果。
?
- 第四個參數,InputArray類型的kernel,形態學運算的內核。若為NULL時,表示的是使用參考點位于中心3x3的核。我們一般使用函數 getStructuringElement配合這個參數的使用。getStructuringElement函數會返回指定形狀和尺寸的結構元素(內核矩陣)。關于getStructuringElement我們上篇文章中講過了,這里為了大家參閱方便,再寫一遍:
其中,getStructuringElement函數的第一個參數表示內核的形狀,我們可以選擇如下三種形狀之一:
- 矩形: MORPH_RECT
- 交叉形: MORPH_CROSS
- 橢圓形: MORPH_ELLIPSE
而getStructuringElement函數的第二和第三個參數分別是內核的尺寸以及錨點的位置。
我們一般在調用erode以及dilate函數之前,先定義一個Mat類型的變量來獲得getStructuringElement函數的返回值。對于錨點的位置,有默認值Point(-1,-1),表示錨點位于中心。且需要注意,十字形的element形狀唯一依賴于錨點的位置。而在其他情況下,錨點只是影響了形態學運算結果的偏移。
- 第五個參數,Point類型的anchor,錨的位置,其有默認值(-1,-1),表示錨位于中心。
- 第六個參數,int類型的iterations,迭代使用函數的次數,默認值為1。
- 第七個參數,int類型的borderType,用于推斷圖像外部像素的某種邊界模式。注意它有默認值BORDER_ CONSTANT。
- 第八個參數,const Scalar&類型的borderValue,當邊界為常數時的邊界值,有默認值morphologyDefaultBorderValue(),一般我們不用去管他。需要用到它時,可以看官方文檔中的createMorphologyFilter()函數得到更詳細的解釋。
getStructuringElement函數相關的調用示例代碼如下
int g_nStructElementSize = 3; //結構元素(內核矩陣)的尺寸//獲取自定義核 Mat element =getStructuringElement(MORPH_RECT,Size(2*g_nStructElementSize+1,2*g_nStructElementSize+1),Point(g_nStructElementSize, g_nStructElementSize ));opencv代碼:
//-----------------------------------【頭文件包含部分】--------------------------------------- // 描述:包含程序所依賴的頭文件 //---------------------------------------------------------------------------------------------- #include <opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp>//-----------------------------------【命名空間聲明部分】--------------------------------------- // 描述:包含程序所使用的命名空間 //----------------------------------------------------------------------------------------------- using namespace cv; //-----------------------------------【main( )函數】-------------------------------------------- // 描述:控制臺應用程序的入口函數,我們的程序從這里開始 //----------------------------------------------------------------------------------------------- int main( ) {//載入原始圖 Mat image = imread("1.jpg"); //工程目錄下應該有一張名為1.jpg的素材圖//創建窗口 namedWindow("【原始圖】開運算"); namedWindow("【效果圖】開運算"); //顯示原始圖 imshow("【原始圖】開運算", image); //定義核Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //進行形態學操作morphologyEx(image,image, MORPH_OPEN, element);//顯示效果圖 imshow("【效果圖】開運算", image); waitKey(0); return 0; }
總結
以上是生活随笔為你收集整理的morphologyEx函数的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: medianBlur函数
- 下一篇: GaussianBlur函数
