使用cv2.threshold()函数绘制轮廓

时间:2015-02-26 16:30:21

标签: python python-2.7 opencv contour

我正在使用不同的值测试cv2.threshold()函数,但每次都会得到意外的结果。所以这意味着我无法理解parameter

的效果
  • MAXVAL

有人可以清楚我吗?

例如,我想在白色后绘制这颗恒星的轮廓:

enter image description here

这是我得到的:

enter image description here

从这段代码:

import cv2    
im=cv2.imread('image.jpg') # read picture

imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) # BGR to grayscale

ret,thresh=cv2.threshold(imgray,200,255,cv2.THRESH_BINARY_INV)

countours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)


cv2.drawContours(im,countours,-1,(0,255,0),3)
cv2.imshow("Contour",im)

cv2.waitKey(0)
cv2.destroyAllWindows()

每当我更改maxval的值时,我都会得到一个我无法理解的奇怪结果。如何使用此功能正确绘制此星的轮廓?

提前谢谢。

3 个答案:

答案 0 :(得分:5)

您可能想要尝试一个非常简单的图像,它可以让您清楚地了解各种参数。下面附带图像的有趣之处在于图像中显示的数字的灰度值等于数字。例如。 200是用灰度值200写的。这是你可以使用的示例python代码。

import cv2

# Read image
src = cv2.imread("threshold.png", cv2.CV_LOAD_IMAGE_GRAYSCALE)

# Set threshold and maxValue
thresh = 127
maxValue = 255

# Basic threshold example
th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_BINARY);

# Find Contours 
countours,hierarchy=cv2.findContours(dst,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# Draw Contour
cv2.drawContours(dst,countours,-1,(255,255,255),3)

cv2.imshow("Contour",dst)
cv2.waitKey(0)

我从最近写的OpenCV Threshold Tutorial复制了以下图片。它通过示例图像,Python和C ++代码解释了各种参数。希望这可以帮助。

输入图像

OpenCV Threshold Test Image

结果图像enter image description here

答案 1 :(得分:0)

为了更准确地找到轮廓,可以在图像上应用阈值,因为二进制图像倾向于提供更高的精度,然后使用轮廓方法。希望这会有所帮助.. !!!

答案 2 :(得分:0)

在这里你可以使用COLOR_BGR2HSV,然后选择一种颜色,轮廓的制作将很容易尝试,让我知道 在黑色和转换你有相同颜色的黄色和白色,这就是为什么这不起作用