简体   繁体   English

无法正确获得轮廓

[英]unable to get contour properly

I am playing with openCV and doing simple below task.我正在玩 openCV 并执行以下简单任务。

1) Read Image 1) 读取图像

2) thresholding 2) 阈值化

3) Finding contours. 3)寻找轮廓。

4) Drawing all contours in the blank image. 4)在空白图像中绘制所有轮廓。

5) Drawing individual contour. 5) 绘制个人轮廓。

Drawing all contours on the dummy image looks good, whereas drawing single contour produces scattered contour as shown in the below images.在虚拟图像上绘制所有轮廓看起来不错,而绘制单个轮廓会产生分散的轮廓,如下图所示。

Original:原来的:

在此处输入图像描述

All Contours:所有轮廓:

在此处输入图像描述

Single Contour:单一轮廓:

在此处输入图像描述

Please find the code below.请在下面找到代码。

import  cv2
import numpy as np

#Reading Image.
srcImg = cv2.imread("./bottle.jpeg")

#Color Conversion.

grayedImg = cv2.cvtColor(srcImg,cv2.COLOR_RGB2GRAY)
__, thresholdedImg = cv2.threshold(grayedImg, 240, 255, cv2.THRESH_BINARY)

#Noice Removal
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
erodeImage = cv2.erode(thresholdedImg,kernel, iterations=1)
dilatedImg = cv2.dilate(erodeImage,kernel, iterations=1)
_, contours, _ = cv2.findContours(dilatedImg,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

#draw All Contours.

dummyImg = np.zeros(grayedImg.shape, dtype=grayedImg.dtype)
cv2.drawContours(dummyImg, contours, -1, 255, 1)
cv2.imshow("All Contours", dummyImg)
cv2.imwrite("allContours.jpeg",dummyImg)

#draw Individual Contours.

mask =  np.zeros(dummyImg.shape[:2], dtype= dummyImg.dtype)
isolatedImg = cv2.drawContours(mask, contours[9], -1, 255, 1)

cv2.imshow("Indivial Contours.", isolatedImg)
cv2.imwrite("single.jpeg",isolatedImg)

cv2.waitKey(0)

You have to enclose another set of square brackets:您必须用另一组方括号括起来:

isolatedImg = cv2.drawContours(mask, [contours[9]], -1, 255, 1)

Expected result:预期结果:

在此处输入图像描述

If you dig deep, cv2.findContours() returns a list of arrays.如果深入挖掘, cv2.findContours()返回 arrays 的list Now each array contains details on the number of points making up the contour.现在每个array都包含有关构成轮廓的点数的详细信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM