Bir görüntüden kırmızı renk çıkarmaya çalışıyorum. Ben belirtilen aralık sadece değerleri terk etmek eşiği geçerlidir kodu vardır: i kontrol eder etmez AmaPython & OpenCV kullanarak kırmızı renk bulma
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)
, aralıkta Ton değere sahip en 0'dan 10'a kadar say, hem aralığında 170 olarak sağlayabilirsiniz kırmızı 180. Bu nedenle, bu iki aralığın herhangi birinden değerler bırakmak istiyorum. Eşiği 10'dan 170'e ve cv2.bitwise_not işlevini kullanarak ayarlamayı denedim, ancak tüm beyaz rengi de aldım. Sanırım en iyi seçenek, her bir aralık için bir maske oluşturmak ve her ikisini de kullanmaktır, bu yüzden bir şekilde ilerlemeden önce bir araya gelmek zorundayım.
OpenCV kullanarak iki maskeye katılabilmemin bir yolu var mı? Ya da hedefime ulaşmanın başka bir yolu var mı?
Düzeltme. Ben çok zarif değil, ama geldi çalışma çözeltisi:
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]
Hemen hemen karşılar benim ihtiyaçları ve OpenCV fonksiyonları muhtemelen hemen hemen aynı, ama bunu yapmak için daha iyi bir yol olmadığını (bazı özel işlevini kullanarak ve daha az kod yazarak) lütfen benimle paylaşın. :)
İlgilenen biri varsa. Raspberry Pi gibi gömülü cihazlarla çalışıyorum. Sonraki işlem kimliği, bu aygıtlar için çok ağır: output_img [np.where (maske == 0)] = 0. Daha hızlı bir tane ile değiştirilebilir: output_img = cv2.bitwise_and (output_img, output_img, mask = mask) –