【发布时间】:2018-09-29 15:37:47
【问题描述】:
complete noob at open cv 和 numpy here。这是图片:这是我的代码:
import numpy as np
import cv2
im = cv2.imread('test.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
imgray = cv2.medianBlur(imgray, ksize=7)
ret, thresh = cv2.threshold(imgray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
_, contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
print ("number of countours detected before filtering %d -> "%len(contours))
new = np.zeros(imgray.shape)
new = cv2.drawContours(im,contours,len(contours)-1,(0,0,255),18)
cv2.namedWindow('Display',cv2.WINDOW_NORMAL)
cv2.imshow('Display',new)
cv2.waitKey()
mask = np.zeros(imgray.shape,np.uint8)
cv2.drawContours(mask,[contours[len(contours)-1]],0,255,-1)
pixelpoints = cv2.findNonZero(mask)
cv2.imwrite("masked_image.jpg",mask)
print(len(pixelpoints))
print("type of pixelpoints is %s" %type(pixelpoints))
像素点的长度接近 200 万,因为它包含了轮廓覆盖的所有点。但我只需要该轮廓的边界点。我该怎么做?我尝试了 opencv 文档中的几种方法,但总是出现元组和排序操作错误。请...帮忙?
我只需要轮廓的边界点:(
【问题讨论】:
-
在this 文档中,它清楚地说明了使用哪个参数来去除冗余点并获取端点。我不敢相信你的说法,“我已经尝试了 opencv 文档中的几种方法”
-
您能否上传您用于查找轮廓的二进制图像以及预期输出?
-
@RickM.,我可能以某种方式把你弄错了。我道歉。我了解您正在谈论将 cv2.CHAIN_APPROX_NONE 更改为 cv2.CHAIN_APPROX_SIMPLE 但在没有直线的图片中应用此功能不起作用。我仍然得到200万分。如果你看文档,它强调减少线点,而不是弧线。我试过了。
-
@ZdaR 图片添加
-
@MonirulIslam this one 怎么样?如果您还上传预期的输出,那将会很有帮助。从您上传的图片中,几乎不可能说出您要提取的轮廓。
标签: python numpy opencv contour opencv-contour