Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV形状检测在白板上不起作用_Python_Python 3.x_Opencv_Image Processing - Fatal编程技术网

Python OpenCV形状检测在白板上不起作用

Python OpenCV形状检测在白板上不起作用,python,python-3.x,opencv,image-processing,Python,Python 3.x,Opencv,Image Processing,我们正在使用Python OpenCV形状检测。由于某些原因,它在下图中不起作用。是否有需要更改以运行的参数,其中内部形状颜色与背景颜色相同 它适用于网站示例,因为黑色是背景色,形状是不同的颜色 源代码如下: 目前不工作: 运行程序控制台: shapedetector.py 在本教程中工作: 使黑色背景上具有白色形状的二值图像反转并设置阈值 您好,您能提供完整答案的工作代码吗?谢谢 $ python detect_shapes.py --image imagetest.png # if th

我们正在使用Python OpenCV形状检测。由于某些原因,它在下图中不起作用。是否有需要更改以运行的参数,其中内部形状颜色与背景颜色相同

它适用于网站示例,因为黑色是背景色,形状是不同的颜色

源代码如下:

目前不工作:

运行程序控制台:

shapedetector.py

在本教程中工作:


使黑色背景上具有白色形状的二值图像反转并设置阈值

您好,您能提供完整答案的工作代码吗?谢谢
$ python detect_shapes.py --image imagetest.png
# if the shape is a triangle, it will have 3 vertices
if len(approx) == 3:
    shape = "triangle"
# if the shape has 4 vertices, it is either a square or
# a rectangle
elif len(approx) == 4:
    # compute the bounding box of the contour and use the
    # bounding box to compute the aspect ratio
    (x, y, w, h) = cv2.boundingRect(approx)
    ar = w / float(h)
    # a square will have an aspect ratio that is approximately
    # equal to one, otherwise, the shape is a rectangle
    shape = "square" if ar >= 0.95 and ar <= 1.05 else "rectangle"
# if the shape is a pentagon, it will have 5 vertices
elif len(approx) == 5:
    shape = "pentagon"
# otherwise, we assume the shape is a circle
else:
    shape = "circle"
# return the name of the shape
return shape
# loop over the contours
for c in cnts:
    # compute the center of the contour, then detect the name of the
    # shape using only the contour
    M = cv2.moments(c)
    cX = int((M["m10"] / M["m00"]) * ratio)
    cY = int((M["m01"] / M["m00"]) * ratio)
    shape = sd.detect(c)
    # multiply the contour (x, y)-coordinates by the resize ratio,
    # then draw the contours and the name of the shape on the image
    c = c.astype("float")
    c *= ratio
    c = c.astype("int")
    cv2.drawContours(image, [c], -1, (0, 255, 0), 2)
    cv2.putText(image, shape, (cX, cY), cv2.FONT_HERSHEY_SIMPLEX,
        0.5, (255, 255, 255), 2)
    # show the output image
    cv2.imshow("Image", image)
    cv2.waitKey(0)