我只是想了解什么是轮廓(contour),以及使用cv.FindContours函数在OpenCV(我正在使用OpenCV 2.3.1和Python)中创建轮廓时存储的值是什么。我使用以下简单图像进行测试:
在找到轮廓之后,我在ipython中应用了以下命令:
In [8]: contour
Out[8]: <cv2.cv.cvseq at 0x90a31a0>
In [10]: list(contour)
Out[10]:
[(256, 190),
(255, 191),
(112, 191),
(255, 191),
(256, 190),
(257, 191),
(257, 190)]
第一条命令表示,轮廓是一个cvSeq对象。
我在图像上标记了这些点,得到了以下图像(红色圆圈是这些点):
我不明白这意味着什么。
所以我的问题是,第二个命令的结果中的值(即list(contour))表示什么?
编辑:以下是我使用的代码。
import cv
img = cv.LoadImage('simple.jpeg')
imgg = cv.LoadImage('simple.jpeg',cv.CV_LOAD_IMAGE_GRAYSCALE)
storage = cv.CreateMemStorage(0)
contours = cv.FindContours(imgg,storage,cv.CV_RETR_TREE,cv.CV_CHAIN_APPROX_SIMPLE,(0,0))
print list(contours)
for i in list(contours):
cv.Circle(img,i,5,(0,0,255),1)
cv.ShowImage('img',img)
cv.WaitKey(0)
方法
?是CV_CHAIN_APPROX_SIMPLE
吗?(在这种情况下,文档说“一个正立的矩形轮廓由4个点编码”,但似乎并不是这样...) - mathematical.coffeecontours = cv.FindContours(img, storage, cv.CV_RETR_TREE, cv.CV_CHAIN_APPROX_SIMPLE, (0,0))
- Abid Rahman Kz=np.zeros((100,200)).astype('uint8'); cv2.rectangle(z,(20,30),(60,80),255,-1); cs=cv.FindContours(cv.fromarray(z),cv.CreateMemStorage(),mode=cv.CV_RETR_TREE,method=cv.CV_CHAIN_APPROX_SIMPLE); list(cs)
返回预期的[(20, 30), (20, 80), (60, 80), (60, 30)]
。 - mathematical.coffee