Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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_Opencv_Image Processing - Fatal编程技术网

Python OpenCV中的腐蚀和膨胀返回白色

Python OpenCV中的腐蚀和膨胀返回白色,python,opencv,image-processing,Python,Opencv,Image Processing,我正在试着使用拨号和拨号 例如,像这样: dialated = cv2.dilate(edgesCopy, cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3)), iterations = 1) 输入是一个uint8图像,它的值只有0和255,这是从 threshold, thresholdedEdges = cv2.threshold(edges, 220, 255, cv2.THRESH_BINARY_INV); 然而,输出只是一个白色图像。我

我正在试着使用拨号和拨号

例如,像这样:

dialated = cv2.dilate(edgesCopy, cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3)), iterations = 1)
输入是一个uint8图像,它的值只有0和255,这是从

threshold, thresholdedEdges = cv2.threshold(edges, 220, 255, cv2.THRESH_BINARY_INV);
然而,输出只是一个白色图像。我不明白原因

整个代码是

   imageSize = img.shape
    if len(imageSize) != 2:#color
        print "got a color image - quitting"
        return

    cv2.imshow("im1", img)
    cv2.moveWindow("im1", 60, 50)

    gaussianBlur = cv2.GaussianBlur(img, (5, 5), 0)
    # cv2.imshow("gaussianBlur", gaussianBlur)
    # cv2.moveWindow("gaussianBlur", 260, 50)

    medianBlur = cv2.medianBlur(gaussianBlur, 5)
    # cv2.imshow("medianBlur", medianBlur)
    # cv2.moveWindow("medianBlur", 460, 50)

    minGradientValueThreshold = 225
    maxGradientValueThreshold = 150
    edges = cv2.Canny(medianBlur, minGradientValueThreshold, maxGradientValueThreshold)
    cv2.imshow("edges", edges)
    cv2.moveWindow("edges", 660, 50)

    # Threshold.
    # Set values equal to or above 220 to 0.
    # Set values below 220 to 255.

    threshold, thresholdedEdges = cv2.threshold(edges, 220, 1, cv2.THRESH_BINARY_INV);

    edgesCopy = thresholdedEdges.copy()

    #close the edges before floodfilling, to avoid filing the background
    # closing = cv2.morphologyEx(floodFilledImage, cv2.MORPH_CLOSE, cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))  DOESN'T WORK
    dialated = cv2.dilate(edgesCopy, cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3)), iterations = 1)

    cv2.imshow("dialated", dialated)
    cv2.moveWindow("dialated", 60, 250)

    eroded = cv2.erode(dialated, cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3)), iterations = 1)

    closing = eroded

    cv2.imshow("closing", closing)
    cv2.moveWindow("closing", 60, 250)

canny边缘检测的结果是具有厚度为1的二值边缘的图像。您正在使用阈值设置
cv2.THRESH\u BINARY\u INV
对这些边缘进行阈值化(顺便说一句,这是不需要的),这意味着阈值结果得到值1,其中像素小于阈值,大于阈值时为0。这种阈值化的结果自然几乎是带黑线的白色图像->实际上,您只是反转canny边缘检测器的结果。放大这样的图像最终会得到完全白色的图像(不管输入图像实际上是什么)

我建议你跳过阈值步骤


如果仍要执行阈值设置,请使用
THRESH_BINARY
并将
maxval
设置为255。我还认为在每次
cv2.imshow()
函数调用之后都应该有
cv2.waitKey()
(至少在我的情况下,它不会显示任何其他内容)。

canny边缘检测的结果是具有厚度为1的二值边缘的图像。您正在使用阈值设置
cv2.THRESH\u BINARY\u INV
对这些边缘进行阈值化(顺便说一句,这是不需要的),这意味着阈值结果得到值1,其中像素小于阈值,大于阈值时为0。这种阈值化的结果自然几乎是带黑线的白色图像->实际上,您只是反转canny边缘检测器的结果。放大这样的图像最终会得到完全白色的图像(不管输入图像实际上是什么)

我建议你跳过阈值步骤


如果仍要执行阈值设置,请使用
THRESH_BINARY
并将
maxval
设置为255。我还认为在每次
cv2.imshow()
函数调用之后都应该有
cv2.waitKey()
(至少在我的情况下,它没有显示任何其他内容)。

我可以问一下,为什么用不同的滤镜模糊图像两次?我可以问一下,为什么用不同的滤镜模糊图像两次?