无法正确获得轮廓
unable to get contour properly
我正在玩 openCV 并执行以下简单任务。
1) 读取图片
2) 阈值
3) 寻找等高线。
4) 在空白图像中绘制所有轮廓。
5) 绘制个人轮廓。
在虚拟图像上绘制所有轮廓看起来不错,而绘制单个轮廓会产生散乱的轮廓,如下图所示。
原文:
所有轮廓:
单轮廓:
请在下面找到代码。
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)
您必须用另一组方括号括起来:
isolatedImg = cv2.drawContours(mask, [contours[9]], -1, 255, 1)
预期结果:
如果你深入挖掘,cv2.findContours()
returns 一个 list
数组。现在每个 array
都包含构成轮廓的点数的详细信息。
我正在玩 openCV 并执行以下简单任务。
1) 读取图片
2) 阈值
3) 寻找等高线。
4) 在空白图像中绘制所有轮廓。
5) 绘制个人轮廓。
在虚拟图像上绘制所有轮廓看起来不错,而绘制单个轮廓会产生散乱的轮廓,如下图所示。
原文:
所有轮廓:
单轮廓:
请在下面找到代码。
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)
您必须用另一组方括号括起来:
isolatedImg = cv2.drawContours(mask, [contours[9]], -1, 255, 1)
预期结果:
如果你深入挖掘,cv2.findContours()
returns 一个 list
数组。现在每个 array
都包含构成轮廓的点数的详细信息。