7

में केवल एक किनारे की आवश्यकता है जब मैं कैनी एज एल्गोरिदम का उपयोग करता हूं, तो यह अपेक्षाकृत मोटी रंगीन रेखा के विपरीत 2 किनारों का उत्पादन करता है, लेकिन मुझे केवल एक किनारे दिखाना है ताकि मेरी रेखा और वक्र पहचान हो सके एल्गोरिदम बहुत कम जटिल, किसी भी विचार पर मैं इसे कैसे कर सकता हूं?कैनी एज एल्गोरिदम

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

यहाँ कोड है

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

+0

क्या आप अपनी मूल छवि का लिंक अपलोड कर सकते हैं? अन्य लोग बेहतर तरीके प्रदान कर सकते हैं। –

+0

यह करने के लिए गूंगा-सरल तरीका छवि का आकार बदलना है - इसे इतना छोटा बनाएं कि किनारें 1-2 पिक्सल होंगी। आपके पास 1-पिक्सेल कैनी किनारों और तत्काल प्रदर्शन को बढ़ावा मिलेगा। – Sam

उत्तर

2

प्रक्रिया skeletonization या thinning कहा जाता है यही कारण है कि। आप इसके लिए Google कर सकते हैं।

यहाँ एक simple method for skeletonization है: skeletonization OpenCV In C#

नीचे output जब अपनी छवि को विधि ऊपर लागू मुझे मिल गया है (छवि से पहले उलटी, skeletonization क्योंकि white images in black background के लिए उपरोक्त विधि काम, बस अपने इनपुट छवि के विपरीत मामले) ।

enter image description here

+0

यह वास्तव में उपयोगी दिखता है, क्यों छवि प्रसंस्करण में कैनी को कंकाल की पेशकश नहीं की जाती है (मैं इसे मान रहा हूं क्योंकि मैंने इसके बारे में बिल्कुल नहीं सुना है) –

+0

मुझे इसके बारे में निश्चित नहीं है, लेकिन कैनी एज डिटेक्शन का उपयोग आमतौर पर किया जाता है, और कंकालकरण भी अभी भी एक विकासशील दृष्टिकोण है, दिन-दर-दिन तैयार किए जा रहे हैं (मेरे उत्तर में दृष्टिकोण इतना अच्छा नहीं है)। किसी भी तरह से मैंने अभी तक कंकालकरण का उपयोग नहीं किया है। –

+0

यह प्रभावशाली है! लेकिन अगर आप छवि या पृष्ठभूमि का रंग नहीं जानते तो यह काम करेगा? –

संबंधित मुद्दे