【问题标题】:Python: detect black squaresPython:检测黑色方块
【发布时间】:2013-07-26 13:46:36
【问题描述】:

我正在尝试检测黑色方块。

这是我目前的代码...

    frame=cv2.imread('squares.jpg')
    img=cv2.GaussianBlur(frame, (5,5), 0)

    img=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    lower=np.array([0, 0, 0],np.uint8)
    upper=np.array([10, 50, 50],np.uint8)
    separated=cv2.inRange(img,lower,upper)


    #this bit draws a red rectangle around the detected region
    contours,hierarchy=cv2.findContours(separated,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
    max_area = 0
    largest_contour = None
    for idx, contour in enumerate(contours):
        area = cv2.contourArea(contour)
        if area > max_area:
            max_area = area
            largest_contour=contour
            if not largest_contour==None:
                moment = cv2.moments(largest_contour)
                if moment["m00"] > 1000:
                    rect = cv2.minAreaRect(largest_contour)
                    rect = ((rect[0][0], rect[0][1]), (rect[1][0], rect[1][1]), rect[2])
                    (width,height)=(rect[1][0],rect[1][1])
                    print str(width)+" "+str(height)
                    box = cv2.cv.BoxPoints(rect)
                    box = np.int0(box)
                    if(height>0.9*width and height<1.1*width):
                            cv2.drawContours(frame,[box], 0, (0, 0, 255), 2)

    cv2.imshow('img',frame)

然后我尝试在检测到的黑色区域周围画一个红色方块。

代码适用于黄色、橙色、红色和绿色,参数如下:

colours=['yellow','orange','red','green','black','white']
uppers=[[20,100,100],[5,100,100],[0,100,100],[???,???,???],[???,???,???]]
lowers=[[30,255,255],[15,255,255],[6,255,255],[???,???,???],[???,???,???]]

我只是不能让黑色或白色工作......

有什么想法吗?

【问题讨论】:

  • 我觉得你可以试试黑白切换!它可能会起作用
  • 我对opencv没有太多经验,但黑色的值应该大致(假设图片是8位):上:[180, 10, 50],下:[0, 0, 0];白色:[180, 10, 255],下:[0, 0, 205]。微调将是必要的

标签: python opencv image-processing


【解决方案1】:

这里的关键直觉是黑色位于HSV cylinder 中的所有色调和饱和度值处,但仅位于低值处。我发现下限[0, 0, 0] 和上限[180, 255, 50] 将定位黑色方块,如下所示:

我还应该提到,您的方法不适用于查找白色方块,原因如下:

  • 存在多个白色方块。您的方法只选择最大的轮廓,这意味着每种颜色只能检测到一个正方形。
  • 很难将“白色方块”与打印它们的纸张颜色区分开来。您可能会得到一个连接正方形和侧面纸条的轮廓。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-26
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2020-02-01
    • 2018-08-02
    相关资源
    最近更新 更多