7

當我使用Canny邊緣算法時,它會像預期的那樣產生與粗綵線相對的2條邊線,但我只想顯示一條邊線,以便進行線條和曲線檢測算法複雜得多,關於如何使這種情況發生的任何想法?在Canny邊緣算法中只需要一條邊線

enter image description here

下面是代碼:

bool CannyEdgeDetection(DataStructure& col) 
{ 

Mat src, src_gray; 
Mat dst, detected_edges, fin; 
int WhiteCount = 0, BCount = 0; 

char szFil1[32] = "ocv.bmp"; 
char szFil2[32] = "dst.bmp"; 
src = imread(szFil1); 
dst = imread(szFil1); 
blur(src_gray, detected_edges, Size(3,3)); 
Canny(src, dst, 100, 200, 3); 
imwrite(szFil2, dst); 

IplImage* img = cvLoadImage(szFil2); 
int height = img->height; 
int width  = img->width; 
int step  = img->widthStep; 
int channels = img->nChannels; 
uchar * datau  = (uchar *)img->imageData; 

for(int i=0;i<height;i++){ 
for(int j=0;j<width;j++){ 
for(int k=0;k<channels;k++){ 
datau[i*step+j*channels+k] = 255 - datau[i*step+j*channels+k]; 
if (datau[i*step+j*channels+k]==0){ 
WhiteCount++; 
col.pixel_col [i][j] = 2; 
} 
else{BCount++; 
col.pixel_col[i][j] = 0; 
} 
} 
} 
} 

cvSaveImage("img.bmp" ,img); 

return 0; 

} 

這不是原始圖像,但類似:

enter image description here

我該註釋的部分分離出來,能夠閱讀黑色的圖像在白色背景?或任何彩色圖像?

bool done; 
do 
{ 
    cv::morphologyEx(img, temp, cv::MORPH_OPEN, element); 
    cv::bitwise_not(temp, temp); 
    cv::bitwise_and(img, temp, temp); 
    cv::bitwise_or(skel, temp, skel); 
    cv::erode(img, img, element); 

    double max; 
    cv::minMaxLoc(img, 0, &max); 
    done = (max == 0); 
} while (!done); 
+0

你到目前爲止試過了什麼?你可以發佈一些代碼嗎?或者至少是輸入圖像? – dom 2012-07-15 14:09:50

+0

你可以上傳一個鏈接到你的原始圖像?可能是其他人可以提供更好的方法。 – 2012-07-15 14:22:24

+0

最簡單的方法就是調整圖像的大小 - 使其足夠小,邊緣將爲1-2像素。您將擁有1像素Canny邊緣和即時性能提升。 – Sam 2012-07-16 07:49:32

回答

2

該過程被稱爲skeletonizationthinning。你可以谷歌的。

這裏是一個simple method for skeletonizationskeletonization OpenCV In C#

以下爲output當上述方法應用到圖像我得到(圖片之前反轉骨架因爲white images in black background上述方法工作,你的輸入圖像的對面的情況下) 。

enter image description here

+0

這看起來真的很有用,爲什麼在圖像處理中不能骨架化canny(我假設這是因爲我沒有聽說過這個) – 2012-07-15 14:14:56

+0

我不確定,但canny邊緣檢測是常用的,骨架化仍然是一個發展中的方法,更多的方法正在日益準備(我的回答中的方法不是那麼好)。任何我還沒有使用過骨架的方式。 – 2012-07-15 14:21:45

+0

令人印象深刻!但如果您不知道圖像或背景的顏色,它會起作用嗎? – 2012-07-15 15:20:30