C++?opencv圖像處理實現(xiàn)圖像腐蝕和膨脹示例
1 概念
1.1 腐蝕跟膨脹是最基本的形態(tài)學運算
1.2 腐蝕跟膨脹是對圖像的白色的部分(亮光部分)進行操作
1.3 腐蝕是對亮光部分進行腐蝕 擁有比原圖更小的亮光部分
1.4 膨脹是對亮光部分進行膨脹 擁有比原圖更大的亮光部分
這里有一個誤區(qū)
假如說在圖片上的一個字,很多人都會認為膨脹是將圖片上的字進行膨脹放大實則不然

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

可以看到腐蝕是將圖片上的亮色區(qū)域進行放小,字就會變得更大。
2 膨脹
1.先看膨脹函數(shù)的原碼,可以到opencv官網(wǎng)進行查看
附鏈接:https://docs.opencv.org/4.5.5/
這里選擇是4.5.5 版本

- src 輸入圖像
- dst 輸出與src相同大小和類型的圖像。
- kernle 用于膨脹的核結構元素 內(nèi)核可以使用getStructuringElement創(chuàng)建
- getStructuringElement函數(shù)下面會說到
- anchor 元素中錨的錨定位置; 默認值(-1,-1)表示錨位于元素中心。
- iterations 迭代次數(shù)
- borderType 像素外推方法
- borderValue 當邊界為常數(shù)時的邊界值
當我們用dilate 函數(shù)時一般情況下使用前三個參數(shù)就可以了,后面參數(shù)都有其默認值,可以視情況改變
2 接下來了解getStructuringElement函數(shù)

- shape 形狀
- MORPH_RECT 矩形
- MORPH_CROSS 交叉形
- MORPH_ELLIPSE 橢圓形
- Szie 構造元素的大小(內(nèi)核尺寸)
- 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.先看腐蝕函數(shù)的原碼

- src 輸入圖像
- dst 輸出與src相同大小和類型的圖像。
- kernle 用于腐蝕的核結構元素 內(nèi)核可以使用getStructuringElement創(chuàng)建
- anchor 元素中錨的錨定位置; 默認值(-1,-1)表示錨位于元素中心。
- iterations 迭代次數(shù)
- borderType 像素外推方法
- borderValue 當邊界為常數(shù)時的邊界值
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 調(diào)整數(shù)值的軌跡條
1.先看函數(shù)原碼

- trackbarname 創(chuàng)建的軌跡條名稱。
- winname 窗口的名稱,可以附加在指定的窗口上
- value 一個指向整形變量的指針,其值反映滑塊的位置。 在創(chuàng)建時,滑塊的位置由這個變量定義。
- count滑塊的最大位置。 最小的位置總是0。
- onChange 指針指向每次滑塊改變位置時調(diào)用的函數(shù)。 這個函數(shù)的原型應該是void Foo(int,void*); 其中第一個參數(shù)是軌跡條位置,第二個參數(shù)是用戶數(shù)據(jù)(見下一個參數(shù))。 如果回調(diào)函數(shù)是NULL指針,則不調(diào)用回調(diào)函數(shù),只更新值。
- userdata 作為回調(diào)函數(shù)傳遞的用戶數(shù)據(jù)
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圖像處理實現(xiàn)腐蝕和膨脹示例的詳細內(nèi)容,更多關于C++ opencv圖像腐蝕膨脹的資料請關注腳本之家其它相關文章!
相關文章
C語言中sizeof()與strlen()函數(shù)的使用入門及對比
這篇文章主要介紹了C語言中sizeof()與strlen()函數(shù)的使用入門及對比,同時二者在C++中的使用情況也基本上同理,是需要的朋友可以參考下2015-12-12
C語言如何實現(xiàn)順序表(數(shù)據(jù)結構)
這篇文章主要介紹了C語言如何實現(xiàn)順序表(數(shù)據(jù)結構)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
舉例講解C語言程序中對二叉樹數(shù)據(jù)結構的各種遍歷方式
這篇文章主要介紹了舉例講解C語言程序中對二叉樹數(shù)據(jù)結構的各種遍歷方式,先序中序后序二叉樹遍歷幾乎成了最老生常談的數(shù)據(jù)結構基礎知識,的朋友可以參考下2016-04-04
VisualStudio 使用Visual Leak Detector檢查內(nèi)存泄漏
這篇文章主要介紹了VisualStudio 使用Visual Leak Detector檢查內(nèi)存泄漏的相關資料,需要的朋友可以參考下2015-07-07

