很多實際的專案中都會遇到線的提取。比如航拍中的電纜線提取,道路交通中的標記線提取(自動駕駛會用到),航母上飛機跑道線的提取等。非常實用也非常重要
原理方法:
影象形態學操作的時候,可以通過自定義的結構元素實現結構元素對輸入影象的一些物件敏感、另外一些物件不敏感,這樣就會讓敏感的物件改變而不敏感的物件保留輸出。通過使用兩個最基本的心態學操作——膨脹和腐蝕,使用不同的結構元素對輸入影象的操作、得到想要的結果。
膨脹——輸出畫素值是結構元素覆蓋下輸入影象的最大畫素值
腐蝕——輸出畫素值是結構元素覆蓋下輸入影象的最小畫素值
提取步驟:
1、輸入灰度彩色影象imread
2、轉換為灰度影象cvtcolor
3、轉換成二值影象adaptivethreshold
4、定義結構元素
5、開操作提取 水平線和垂直線
#include#include#includeusing namespace cv;
const string path = "h:\\c++opencv\\提取水平和垂直線\\lines.png";
const string output_window = "output_window";
mat src = imread(path, imread_reduced_color_2);
mat dst, dst2;
int main(int argc, char**argv)
namedwindow("source pic", cv_window_autosize);
imshow("source pic", src);
cvtcolor(src, dst, cv_bgr2gray);
adaptivethreshold(~dst, dst2, 255, adaptive_thresh_mean_c, thresh_binary, 13, -2);
int xpoint = 11;
int ypoint = 11;
mat dst3,dst4;
mat hkerne = getstructuringelement(morph_rect, size(xpoint, 1), point(-1, -1));
mat vkerne = getstructuringelement(morph_rect, size(1, ypoint), point(-1, -1));
morphologyex(dst2, dst3, morph_open, hkerne, point(-1, -1), 1, 0);
namedwindow("h_morph_open pic", cv_window_autosize);
imshow("h_morph_open pic", dst3);
morphologyex(dst2, dst4, morph_open, vkerne, point(-1, -1), 1, 0);
namedwindow("vmorph_open pic", cv_window_autosize);
imshow("vmorph_open pic", dst4);
waitkey(0);
return 0;
}
原圖:
提取水平線:
提取垂直線:
提取水平與垂直線
輸入彩色影象 imread 轉換為灰度影象 cvtcolor 轉換為二值影象 adaptivethreshold 定義結構元素 開操作 膨脹 腐蝕 提取水平與垂直線 include include using namespace cv using namespace std int main int...
opencv 形態學應用 提取提取水平與垂直線
現象 影象形態學操作時候,可以通過自定義的結構元素實現結構元素對輸入影象一些物件敏感 另外一些物件不敏感,這樣就會讓敏感的物件改變而不敏感的物件保留輸出。通過使用兩個最基本的形態學操作 膨脹與腐蝕,使用不同的結構元素實現對輸入影象的操作 得到想要的結果。比如開操作,先腐蝕後膨脹,將白色的小塊去掉了 ...
opencv 應用 提取水平與垂直直線 去噪
include include includeusing namespace std using namespace cv int main int argc,char ar char input win input image char output win output image namedw...