C++ opencv圖像處理實現圖像腐蝕和膨脹示例

1 概念

1.1 腐蝕跟膨脹是最基本的形態學運算

1.2 腐蝕跟膨脹是對圖像的白色的部分(亮光部分)進行操作

1.3 腐蝕是對亮光部分進行腐蝕 擁有比原圖更小的亮光部分

1.4 膨脹是對亮光部分進行膨脹 擁有比原圖更大的亮光部分 

這裡有一個誤區 

假如說在圖片上的一個字,很多人都會認為膨脹是將圖片上的字進行膨脹放大實則不然

可以看到膨脹是將圖片上的亮色區域進行放大,字就會變得更小,結構體夠大的情況下,字就會看不見瞭**

可以看到腐蝕是將圖片上的亮色區域進行放小,字就會變得更大。

2 膨脹

1.先看膨脹函數的原碼,可以到opencv官網進行查看

附鏈接:https://docs.opencv.org/4.5.5/

這裡選擇是4.5.5 版本

  • src 輸入圖像
  • dst 輸出與src相同大小和類型的圖像。
  • kernle 用於膨脹的核結構元素 內核可以使用getStructuringElement創建
  • getStructuringElement函數下面會說到
  • anchor 元素中錨的錨定位置; 默認值(-1,-1)表示錨位於元素中心。
  • iterations 迭代次數
  • borderType 像素外推方法
  • borderValue 當邊界為常數時的邊界值

當我們用dilate 函數時一般情況下使用前三個參數就可以瞭,後面參數都有其默認值,可以視情況改變

2 接下來瞭解getStructuringElement函數

  • shape 形狀
  • MORPH_RECT 矩形
  • MORPH_CROSS 交叉形
  • MORPH_ELLIPSE 橢圓形
  • Szie 構造元素的大小(內核尺寸)
  • anchor 錨定位置,默認(-1,1)表示錨位於中心

3 代碼

int main()
{
	Mat img1, img2;
	img1 = imread("貓.png");
	imshow("原圖", img1);
	Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
	dilate(img1, img2, element);
	imshow("效果圖", img2);
	waitKey(0);
}

效果圖 :

3 腐蝕

1.先看腐蝕函數的原碼

  • src 輸入圖像
  • dst 輸出與src相同大小和類型的圖像。
  • kernle 用於腐蝕的核結構元素 內核可以使用getStructuringElement創建
  • anchor 元素中錨的錨定位置; 默認值(-1,-1)表示錨位於元素中心。
  • iterations 迭代次數
  • borderType 像素外推方法
  • borderValue 當邊界為常數時的邊界值

2 代碼

int main()
{
	Mat img1, img2;
	img1 = imread("貓1.jpg");
	imshow("原圖", img1);
	Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
	erode(img1, img2, element);
	imshow("效果圖", img2);
	waitKey(0);
}

3 效果圖

4 調整數值的軌跡條

1.先看函數原碼

  • trackbarname 創建的軌跡條名稱。
  • winname 窗口的名稱,可以附加在指定的窗口上
  • value 一個指向整形變量的指針,其值反映滑塊的位置。 在創建時,滑塊的位置由這個變量定義。
  • count滑塊的最大位置。 最小的位置總是0。
  • onChange 指針指向每次滑塊改變位置時調用的函數。 這個函數的原型應該是void Foo(int,void*); 其中第一個參數是軌跡條位置,第二個參數是用戶數據(見下一個參數)。 如果回調函數是NULL指針,則不調用回調函數,隻更新值。
  • userdata 作為回調函數傳遞的用戶數據

2 代碼

Mat img1, img2;
int chu = 3;
int da = 21;
void hui(int, void*);
int main()
{
	img1 = imread("貓1.jpg");
	namedWindow("原圖");
	imshow("原圖", img1);
	namedWindow("膨脹");
	createTrackbar("結構元尺寸", "膨脹", &chu, da,hui);
	hui(chu, 0);
	waitKey(0);
}
void hui(int, void*)
{
	int s = chu ;
	Mat elent = getStructuringElement(MORPH_RECT, Size(s, s));
	dilate(img1, img2, elent);
	imshow("膨脹", img2);
}

3 效果圖

以上就是C++ opencv圖像處理實現腐蝕和膨脹示例的詳細內容,更多關於C++ opencv圖像腐蝕膨脹的資料請關註LevelAH其它相關文章!

推薦閱讀: