Python 使用cv2 findContours,图像中的轮廓看起来非常粗糙。如何改进?

Python 使用cv2 findContours,图像中的轮廓看起来非常粗糙。如何改进?,python,opencv,cv2,Python,Opencv,Cv2,我试图用cv2找到图像的轮廓。有许多相关的问题,但答案似乎总是非常具体,不适用于我的情况 我有一个黑白图像,我把它换成颜色 thresh = cv2.cvtColor(thresh, cv2.COLOR_RGB2GRAY) plt.imshow(thresh) 接下来,我试图找到轮廓 image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 然后我通过在黑色背景上

我试图用cv2找到图像的轮廓。有许多相关的问题,但答案似乎总是非常具体,不适用于我的情况

我有一个黑白图像,我把它换成颜色

thresh = cv2.cvtColor(thresh, cv2.COLOR_RGB2GRAY) 
plt.imshow(thresh)

接下来,我试图找到轮廓

image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
然后我通过在黑色背景上绘制来可视化它

blank_image = np.zeros((thresh.shape[0],thresh.shape[1],3), np.uint8) 
img = cv2.drawContours(blank_image, contours, 0, (255,255,255), 3)
plt.imshow(img)

轮廓遵循实际轮廓,即围绕整个物体。我怎样才能得到这种非常糟糕的油漆印象:


您可以使用Canny边缘检测来执行此操作:


我认为你要寻找的人工制品是“边缘”,而不是“轮廓”。提供一个能再现问题的模型,以及一个原始的输入图像。使用OpenCV的状态版本为什么第二个图中的坐标超过4000?这是否意味着您的输入图像有那么大?我使用的是3.4.1版。是的,输入图像有那么大。这很有效。奇怪的是,它对原始图像(约4000x4000)不起作用。“显然,尺寸需要足够小才能工作。”米切尔凡苏伦,这很有趣。我来试试看。我也有一个解决方案,使用轮廓,但我必须在发布前清理它。
import cv2
frame = cv2.imread("iCyrOT3.png")                       # read a frame
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)          # turn it gray
edges = cv2.Canny(gray, 100, 200)                       # get canny edges
cv2.imshow('Test', edges)                               # display the result
cv2.waitKey(0)