如何执行条件指令以识别Open CV中较大轮廓内的轮廓

时间:2019-05-11 23:49:11

标签: python opencv

我试图识别出较大轮廓内的轮廓,因为我试图使当白色位于黄色内时,程序会打印警报,指出已检测到对象,我该如何做呢?工作吗?

def dibujaramarillo(maskamarillo,color):


_,contornos,hierarchy_=cv2.findContours(maskamarillo, cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)#Procedemos a encontrar los contornos de nuestra mascara en HSV con contornos externos
#y un contorno simple por vertices
for c in contornos: #para ello recorremos 1 por 1 "contornos" y almacenamos en la variable "c"
            area = cv2.contourArea(c) #Guardamos en "area" los contornos recorridos con la funcion mostrada 
            if area > 1000: #si esa area de captura es mayor de 3000 lo va a tomar como positivo y lo contorneará

                    nuevocontorno = cv2.convexHull(c) #con convexHull suavizamos nuestros contornos y eliminamos el ruido
                    cv2.drawContours(frame, [nuevocontorno], 0, color,3) 
 #dibujamos los contornos en nuestro video con las caracteristicas establecidas

Yellow Taxi and inside white color

1 个答案:

答案 0 :(得分:1)

您可以使用hsv蒙版图像,第一个蒙版为黄色:

here

比获得轮廓和遮罩白色:

enter image description here

import cv2
import numpy as np

img = cv2.imread("2NrfJ.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)           
lower_hsv = np.array([10, 100, 100])           
upper_hsv = np.array([34, 255, 255])         
mask = cv2.inRange(hsv, lower_hsv, upper_hsv) 
contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    if cv2.contourArea(contour ) >800: # filter small contours
        x,y,w,h = cv2.boundingRect(contour )
        cv2.rectangle(hsv,(x,y),(x+w,y+h),(0,255,0),2)
        hsv_contour = hsv[y:y+h,x:x+w]
        if np.array(cv2.mean(hsv_contour)).astype(np.uint8)[0] in range(30,40) \
        and np.array(cv2.mean(hsv_contour)).astype(np.uint8)[1] in range(100,150)\
        and np.array(cv2.mean(hsv_contour)).astype(np.uint8)[2] in range(140,160):
            cv2.imshow('cutted contour',img[y:y+h,x:x+w])
            cv2.imshow("mask", mask)
            print("TAXI HAS BEEN RECOGNIZED")
            cv2.waitKey(0)