Opencv Python,形状识别(质量差的图片)

时间:2014-11-16 15:54:47

标签: python-2.7 opencv shape-recognition

我正在使用以下代码来检测图像中的某些形状:

import cv2
import numpy as np

img = cv2.imread("006.jpg")

grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret,thresh = cv2.threshold(grey,127,255,1)

cv2.imshow('img',thresh)
cv2.waitKey(0)

contours, h = cv2.findContours(thresh, 1, cv2.CHAIN_APPROX_SIMPLE)
contours.sort(key = len)
for contour in contours:

    approx = cv2.approxPolyDP(contour, 0.01*cv2.arcLength(contour, True), True)

    #star - > yellow
    if len(approx) == 10:
        cv2.drawContours(img, [contour],0, (0,255,255), -1)

    #circle -> black
    elif len(approx) >= 11:
        cv2.drawContours(img, [contour], 0, (0,0,0), -1)

    #triangle -> green
    elif len(approx) == 3:
        cv2.drawContours(img,[contour],0,(0,255,0),-1)

    #square -> blue
    elif len(approx) == 4:
        cv2.drawContours(img, [contour],0, (255,0,0),-1)

    #pentagon -> red
    elif len(approx) == 5:
        cv2.drawContours(img, [contour],0, (0,0,255), -1)

cv2.imshow('img',img)
cv2.waitKey(0)

此代码适用于计算机上的图像,但是当我打印出图像时,请将其拍摄下来 并尝试再次运行代码(如此处:image)它不能正常运行。

我已经尝试过使用模糊和canny,但我无法使第二张照片足够顺畅。

我希望有人可以提供帮助!

1 个答案:

答案 0 :(得分:0)

可能使用固定阈值(在您的情况下为127),如果相机拍摄的照片不是一个好主意(虽然它在抽象的情况下工作,当形状是纯色而不受阴影影响时)。似乎127对于您提供的图像而言价值太高。

为什么不试试Otsu methodHere's一个如何在opencv中使用python的例子。它会使阈值水平对于摄像机拍摄的图像中的真实环境不变。