का उपयोग करके लाल रंग ढूंढना मैं एक छवि से लाल रंग निकालने की कोशिश कर रहा हूं। मैं सीमा लागू होने वाला निर्दिष्ट सीमा से केवल मूल्यों को छोड़ने के लिए कोड है:,पायथन और ओपनसीवी
img=cv2.imread('img.bmp')
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,50,50]) #example value
upper_red = np.array([10,255,255]) #example value
mask = cv2.inRange(img_hsv, lower_red, upper_red)
img_result = cv2.bitwise_and(img, img, mask=mask)
लेकिन जैसा कि मैंने जाँच की, लाल रेंज में ह्यू मूल्य हो सकता है, के 0 से 10 तक कहना है, साथ ही श्रृंखला में 170 से करने के लिए के रूप में करते हैं 180. इसलिए, मैं उन दो श्रेणियों में से किसी से मूल्य छोड़ना चाहता हूं। मैंने थ्रेसहोल्ड को 10 से 170 तक सेट करने और cv2.bitwise_not फ़ंक्शन का उपयोग करने की कोशिश की, लेकिन फिर मुझे सभी सफेद रंग भी मिलते हैं। मुझे लगता है कि सबसे अच्छा विकल्प प्रत्येक श्रेणी के लिए एक मुखौटा बनाना होगा और दोनों का उपयोग करना होगा, इसलिए आगे बढ़ने से पहले मुझे किसी भी तरह से उनसे जुड़ना होगा।
क्या कोई तरीका है कि मैं ओपनसीवी का उपयोग करके दो मास्क में शामिल हो सकता हूं? या क्या कोई और तरीका है कि मैं अपना लक्ष्य प्राप्त कर सकता हूं?
संपादित करें। मैं बहुत सुंदर नहीं के साथ आया था, लेकिन काम कर समाधान:
image_result = np.zeros((image_height,image_width,3),np.uint8)
for i in range(image_height): #those are set elsewhere
for j in range(image_width): #those are set elsewhere
if img_hsv[i][j][1]>=50 \
and img_hsv[i][j][2]>=50 \
and (img_hsv[i][j][0] <= 10 or img_hsv[i][j][0]>=170):
image_result[i][j]=img_hsv[i][j]
यह बहुत ज्यादा संतुष्ट करता है मेरी जरूरतों, और OpenCV के कार्यों शायद काफी भी ऐसा ही है, लेकिन वहाँ है कि ऐसा करने के लिए एक बेहतर तरीका है (कुछ समर्पित समारोह का उपयोग कर और कम कोड लिखना) कृपया इसे मेरे साथ साझा करें। :)
यदि कोई दिलचस्पी लेता है। मैं एम्बेडेड डिवाइसों के साथ काम कर रहा हूं, जैसे रास्पबेरी पीआई। अगली ऑपरेशन आईडी इस तरह के उपकरणों के लिए बहुत भारी है: output_img [np.where (मास्क == 0)] = 0. इसे बहुत तेज से बदला जा सकता है: output_img = cv2.bitwise_and (output_img, output_img, mask = मुखौटा) –