首页 > 解决方案 > 如何使用 Opencv 检测另一个轮廓中的一个轮廓?

问题描述

我正在尝试在黄色轮廓(出租车)内制作白色轮廓(汽车的白色车牌),但我什至无法识别 HSV 中该车牌的白色,我该如何解决这个问题?在代码中,我使用轨迹栏能够将 RGB 的值更改为我的自由意志。谢谢!

import cv2
import numpy as np
kernel = np.ones((5,5),np.uint8)


def dibujarblanco(maskblanco,color):


    _,contornos,_=cv2.findContours(maskblanco, 
cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

    for c in contornos:
                area = cv2.contourArea(c)
                    if area > 200:

                        nuevocontorno = cv2.convexHull(c)
                        cv2.drawContours(frame, [nuevocontorno], 0, color,3)


def nothing(x):
    pass
video = cv2.VideoCapture("taxismenor.mp4")

cv2.namedWindow("Barras Blanco")

cv2.createTrackbar("B", "Barras Blanco", 0, 255, nothing)
cv2.createTrackbar("G", "Barras Blanco", 0, 255, nothing)
cv2.createTrackbar("R", "Barras Blanco", 0, 255, nothing)

while(1):
    _, frame=video.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)  

    B = cv2.getTrackbarPos("B", "Barras Blanco")
    G = cv2.getTrackbarPos("G", "Barras Blanco")
    R = cv2.getTrackbarPos("R", "Barras Blanco")

    blanco = np.uint8([[[B, G, R]]])
    hsvBlanco = cv2.cvtColor(blanco,cv2.COLOR_BGR2HSV)
    lowerLimitb = np.uint8([hsvBlanco[0][0][0]-10,100,100])
    upperLimitb = np.uint8([hsvBlanco[0][0][0]+10,255,255])


    maskblanco = cv2.inRange(hsv, lowerLimitb, upperLimitb)                    


    dibujarblanco(maskblanco,(0,0,255))

    cv2.imshow("frame", frame)
    cv2.imshow("maskblanco", maskblanco)

    key = cv2.waitKey(1)

    if key == 27:
        break

cv2.destroyAllWindows()

是尝试勾勒出盘子白色的结果。没什么,它不起作用。

标签: pythonopencv

解决方案


我认为您可以首先将轮廓(a taix)设置为图像背景的颜色。然后,复制此图像以检测下一个轮廓。


推荐阅读