2014-11-19 6 views
9

मैंने ओपनसीवी पायथन का उपयोग किया है और एक त्रुटि आई है।अनुकूली थ्रेसहोल्ड का उपयोग करने में विफलता: फ़ंक्शन अनुकूली में CV_8UC1 थ्रेसहोल्ड

img_blur = cv2.medianBlur(self.cropped_img,5) 
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) 

plt.subplot(1,1,1),plt.imshow(img_thresh_Gaussian, cmap = 'gray') 
plt.title("Image"), plt.xticks([]), plt.yticks([]) 
plt.show() 

लेकिन मैं प्राप्त किया:

cv2.error: /home/phuong/opencv_src/opencv/modules/imgproc/src/thresh.cpp:1280: error: (-215) src.type() == CV_8UC1 in function adaptiveThreshold 

मैं कुछ और स्थापित करने के लिए है?

+0

इनपुट 8 बिट, एकल चैनल होना चाहिए। आप शायद medianblur लगाने से पहले ग्रेस्केल में कनवर्ट करना भूल गए हैं। – berak

+0

सीवी_8 यूसी 1 स्रोत प्रकार है जबकि आपका 'img_blur' प्रकार कुछ अलग होना चाहिए (यानी बदला जाना चाहिए)। लक्ष्य को सटीक हानि के लिए कवर करने के लिए या तो सीवी 8 यूसी 1 या सीवी 16 यूसी 1 जैसे बड़े होने की आवश्यकता है। मुझे सी ++ एपीआई में समान समस्याएं थीं। – ha9u63ar

उत्तर

9

आप इस

src.create(rows, cols, CV_8UC1); 
src = imread(your-file, CV_8UC1); 

की तरह अपनी फ़ाइल लोड करना चाहिए और उस

adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 75, 10); 
+3

'src''' 'टाइप'' – muon

29

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

तो आपको अपनी छवि को ग्रेस्केल प्रारूप में रूपांतरित करना होगा क्योंकि यह documentation में वर्णित है।

उन्होंने छवि को एक ग्रेस्केल प्रारूप में पढ़ा है: img = cv2.imread('dave.jpg',0)। आप इसे ग्रेस्केल में भी बदल सकते हैं: img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

+1

उत्कृष्ट क्या है। मैं किसी भी समय कोड पर एक अच्छा स्पष्टीकरण लेता हूं ... –

+0

मुझे यह जवाब पसंद है! इसे सही के रूप में चिह्नित करें – void

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