में केवल एक किनारे की आवश्यकता है जब मैं कैनी एज एल्गोरिदम का उपयोग करता हूं, तो यह अपेक्षाकृत मोटी रंगीन रेखा के विपरीत 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;
}
यह मूल छवि लेकिन समान नहीं है:
यहाँ कोड है
कौन सा हिस्सा मैं बाहर टिप्पणी करते पढ़ने के लिए सक्षम होने के लिए सफेद पृष्ठभूमि में काले छवियों? या किसी भी रंगीन छवि?
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);
आपने अभी तक क्या प्रयास किया है? क्या आप कुछ कोड पोस्ट कर सकते हैं? या कम से कम इनपुट छवि? – dom
क्या आप अपनी मूल छवि का लिंक अपलोड कर सकते हैं? अन्य लोग बेहतर तरीके प्रदान कर सकते हैं। –
यह करने के लिए गूंगा-सरल तरीका छवि का आकार बदलना है - इसे इतना छोटा बनाएं कि किनारें 1-2 पिक्सल होंगी। आपके पास 1-पिक्सेल कैनी किनारों और तत्काल प्रदर्शन को बढ़ावा मिलेगा। – Sam