Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 如何在没有误报的情况下绘制/轮廓图像中形状的边缘?_Python_Opencv_Image Processing_Opencv Contour_Opencv Drawcontour - Fatal编程技术网

Python 如何在没有误报的情况下绘制/轮廓图像中形状的边缘?

Python 如何在没有误报的情况下绘制/轮廓图像中形状的边缘?,python,opencv,image-processing,opencv-contour,opencv-drawcontour,Python,Opencv,Image Processing,Opencv Contour,Opencv Drawcontour,我正在尝试制作一个脚本,在这个脚本中,我可以绘制图像中每个形状的轮廓,在某些情况下可以工作,但在形状的颜色出现一些退化时失败。它的本意是绘制形状的轮廓(本例中为矩形),但无法绘制整个矩形,还添加了一些内部为假阳性的点。有没有一种方法可以让脚本或其他工具变得不那么敏感,从而帮助我实现这一点 from __future__ import print_function import os import imutils import cv2 from PIL import Image import nu

我正在尝试制作一个脚本,在这个脚本中,我可以绘制图像中每个形状的轮廓,在某些情况下可以工作,但在形状的颜色出现一些退化时失败。它的本意是绘制形状的轮廓(本例中为矩形),但无法绘制整个矩形,还添加了一些内部为假阳性的点。有没有一种方法可以让脚本或其他工具变得不那么敏感,从而帮助我实现这一点

from __future__ import print_function
import os
import imutils
import cv2
from PIL import Image
import numpy as np


print("OpenCV Version: {}".format(cv2.__version__))
image = cv2.imread("input.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)[1]
if imutils.is_cv2() or imutils.is_cv4():
    (cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
        cv2.CHAIN_APPROX_NONE)
elif imutils.is_cv3():
    (_, cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
        cv2.CHAIN_APPROX_NONE)

cv2.drawContours(image, cnts, -1, (50, 50, 50),24)

RGBimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
PILimage = Image.fromarray(RGBimage)
PILimage.save('output.png', dpi=(300,300))

使用以下命令更改阈值:


thresh=cv2.threshold(灰色,250,255,cv2.thresh\u BINARY\u INV)[1]

你也可以发布原始图像吗?我想试试你的代码。我在试着学习枕头。我不知道找到的玩具是如何工作的,你能用同样的方式变换你的图像,使它只有两种颜色吗?tha docs说,轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色或强度。轮廓线是形状分析、目标检测和识别的有用工具。为了获得更好的准确度,请使用二进制图像。因此,在找到轮廓之前,应用阈值或canny边缘检测threshold@lorelayb您好,使用您的代码作为输入,我将其作为输出,这样您的代码似乎可以正常工作。使用您上传的输入返回输入图像作为输出不确定它是否与countur查找白色而非黑色有关countour谢谢!发现更改阈值实际上是关键,目前还不确定计算阈值的最佳方法是什么,但会尝试进行不同的测试,以便更好地了解如何在不同的场景中选择值,但希望250255左右的东西能在不同的场景下继续发挥作用。不知道猜测取决于你拥有的灰色范围,也取决于你拥有的颜色范围。看看这个:在优化findcounturs方面很有趣