मुझे काले रंग के सिक्कों के अंदर सफेद छेद भरने में समस्या है ताकि मेरे पास भरे काले सिक्कों के साथ केवल 0-255 बाइनरी छवि हो .. मैंने इसे पूरा करने के लिए मध्य फ़िल्टर का उपयोग किया है लेकिन उस मामले में सिक्के के बीच संबंध पुल बढ़ता है और यह कटाव के कई बार के बाद उन्हें पहचान करने के लिए असंभव हो जाता है ... तो मैं opencv में विधि की तरह एक साधारण floodFill जरूरतबाइनरी ऑब्जेक्ट के अंदर छेद भरना
यहाँ छेद के साथ मेरी छवि है:
संपादित करें: फ़ंक्शन की तरह बाढ़ भरने को छेद भरना होगा X को संकेत दिए बिना बड़े घटकों में, वाई बीज के रूप में निर्देशांक ...
संपादित करें: मैंने cvDrawContours फ़ंक्शन का उपयोग करने की कोशिश की लेकिन मैं बड़े लोगों के अंदर समरूपता नहीं भरता।
CvMemStorage mem = cvCreateMemStorage(0);
CvSeq contours = new CvSeq();
CvSeq ptr = new CvSeq();
int sizeofCvContour = Loader.sizeof(CvContour.class);
cvThreshold(gray, gray, 150, 255, CV_THRESH_BINARY_INV);
int numOfContours = cvFindContours(gray, mem, contours, sizeofCvContour, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
System.out.println("The num of contours: "+numOfContours); //prints 87, ok
Random rand = new Random();
for (ptr = contours; ptr != null; ptr = ptr.h_next()) {
Color randomColor = new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat());
CvScalar color = CV_RGB(randomColor.getRed(), randomColor.getGreen(), randomColor.getBlue());
cvDrawContours(gray, ptr, color, color, -1, CV_FILLED, 8);
}
CanvasFrame canvas6 = new CanvasFrame("drawContours");
canvas6.showImage(gray);
परिणाम::
यहाँ मेरी कोड है (आप प्रत्येक सिक्का अंदर ब्लैक होल देख सकते हैं)
+1 सिर्फ इसलिए कि मैं सरल समाधान का आनंद लें। – karlphillip
मेरे मामले cvDrawContours में मुझे लगता है कि काम नहीं करता, मैं पोस्ट को अद्यतन किया है .. –
ठीक है, मैं एक पैरामीटर समस्या मैं का उपयोग करना चाहिए था: cvDrawContours (ग्रे, ptr, रंग, रंग, 0, CV_FILLED, 8); अधिकतम_लेवल पैरामीटर के रूप में 0 के साथ। एचएम अब सफलता से भर गया :) –