简体   繁体   English

如何使用轮廓保存 OpenCV 图像

[英]How to save OpenCV image with contour

I want to save image with contour我想用轮廓保存图像

Here is my code:这是我的代码:

img = cv2.imread('123.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
image, contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:
    # some code in here
    cv2.imwrite('234.jpg', cnt)

Thanks a lot.非常感谢。

What you want to do is to create a mask that you draw the contours on to, then use that to snip out the rest of the picture, or vice-versa.您要做的是创建一个蒙版,在其上绘制轮廓,然后用它剪掉图片的其余部分,反之亦然。 For instance, based on this tutorial :例如, 基于本教程

(contours, _) = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
mask = np.ones(img.shape[:2], dtype="uint8") * 255

# Draw the contours on the mask
cv2.drawContours(mask, contours, -1, 0, -1)

# remove the contours from the image and show the resulting images
img = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow("Mask", mask)
cv2.imshow("After", img)
cv2.waitKey(0)

The easiest way to save the contour as image is taking out its ROI(region of image) and saving it using imwrite() as follows -将轮廓保存为图像的最简单方法是取出其 ROI(图像区域)并使用 imwrite() 保存,如下所示 -

First use cv2.boundingRect to get the bounding rectangle for a set of points (ie contours):首先使用 cv2.boundingRect 获取一组点(即轮廓)的边界矩形:

x, y, width, height = cv2.boundingRect(contours[i])

You can then use NumPy indexing to get your ROI from the image:然后,您可以使用 NumPy 索引从图像中获取 ROI:

roi = img[y:y+height, x:x+width]

And save the ROI to a new file:并将 ROI 保存到一个新文件中:

cv2.imwrite("roi.png", roi)

I was trying many times and finally, I could make it:我尝试了很多次,最后,我可以做到:

 image= cv2.imread('muroprueba.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY) cnts, herarchy = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(image,cnts,-1,(0,255,0),1) cv2.imshow('image1',image) cv2.waitKey(0) cv2.imwrite('F:\\caso1.jpg',image) #Save the image cv2.destroyAllWindows()

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

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