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

1 python opencv contour python-2.7

我正在用不同的值测试cv2.threshold()函数,但是每次都得到意外的结果。所以这意味着我根本不了解参数的作用:

  • 最大值

有人可以让我清楚吗?

例如,我要按照白色绘制该星星的轮廓:

在此处输入图片说明

这是我得到的:

在此处输入图片说明

从此代码:

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()
Run Code Online (Sandbox Code Playgroud)

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

先感谢您。

Sat*_*ick 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)
Run Code Online (Sandbox Code Playgroud)

我从最近写的《OpenCV阈值教程》中复制了以下图像。它通过示例图像,Python和C ++代码解释了各种参数。希望这可以帮助。

输入图像

OpenCV阈值测试映像

结果图像在此处输入图片说明