OpenCV का उपयोग करके छवि में रंगीन पैच का पता कैसे लगाया जाए?



image-processing computer-vision (1)

मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या तस्वीर (काले और सफेद स्केच) मोबाइल कैमरे द्वारा कमरे की स्थितियों में रंगीन है या नहीं।

मैं यह परिणाम प्राप्त करने में सक्षम हूं

निम्नलिखित कोड का उपयोग कर

Mat dest = new Mat (sections[i].rows(),sections[i].cols(),CvType.CV_8UC3);
Mat hsv_image = new Mat (sections[i].rows(),sections[i].cols(),CvType.CV_8UC3);

Imgproc.cvtColor (sections[i],hsv_image,Imgproc.COLOR_BGR2HSV);

List <Mat> rgb = new List<Mat> ();
Core.split (hsv_image, rgb);
Imgproc.equalizeHist (rgb [1], rgb [2]);
Core.merge (rgb, sections[i]);
Imgproc.cvtColor (sections[i], dest, Imgproc.COLOR_HSV2BGR);

Core.split (dest, rgb);

मैं कैसे पता लगा सकता हूं कि छवि रंगीन है या नहीं। रंग किसी भी हो सकता है और इसमें कमरे की स्थिति है। कृपया इस पर मेरी मदद करें क्योंकि मैं इसके लिए शुरुआती हूं।

धन्यवाद


HSV color-space में रंगीन छवि को संसाधित करने के लिए एक अच्छी दिशा है। और मैं चैनलों को विभाजित करता हूं और पाता हूं कि S चैनल महान है। क्योंकि S रंग का Saturation(饱和度) है।

फिर S को 100 थ्रेसहोल्ड से थ्रेसहोल्ड करें, आपको यह मिल जाएगा।

थ्रेडेड बाइनरी इमेज में रंगीन क्षेत्र को अलग करना आसान होगा।

@ मर्क के सुझाव के अनुसार, हम निश्चित एक के अलावा अन्य अनुकूली थ्रेश का उपयोग कर सकते हैं। तो, झंडे में THRESH_OTSU जोड़ें।

कोर पायथन कोड निम्नानुसार प्रस्तुत किया गया है:

##(1) read into  bgr-space
img = cv2.imread("test.png")

##(2) convert to hsv-space, then split the channels
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)

##(3) threshold the S channel using adaptive method(`THRESH_OTSU`)  
th, threshed = cv2.threshold(s, 100, 255, cv2.THRESH_OTSU|cv2.THRESH_BINARY)

##(4) print the thresh, and save the result
print("Thresh : {}".format(th))
cv2.imwrite("result.png", threshed)


## >>> Thresh : 85.0

संबंधित जवाब:

  1. एक छवि में रंगीन सेगमेंट का पता लगाएं
  2. Opencv Android में एज डिटेक्शन
  3. OpenCV C ++ / Obj-C: कागज की एक शीट का पता लगाना / स्क्वायर डिटेक्शन




color-detection