在找到的边界中提取内容python opencv?

2024-04-29 00:27:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提取图像的一部分,并将其保存为边界内的单独图像。我提取并绘制边界如下:

cnts, hierarchy= cv2.findContours(gray.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for contour in cnts:
    print(cv2.boundingRect(contour))
cv2.drawContours(img,cnts,-1,(125,125,0),3 )
cv2.imshow('contours',img)
cv2.waitKey(0)  
cv2.destroyAllWindows()

如何获得边界内的图像作为单独的图像?这是我的形象:

enter image description here


Tags: 图像chainimghierarchy绘制cv2external边界
1条回答
网友
1楼 · 发布于 2024-04-29 00:27:24

您应该找到边界矩形,然后将其保存到新图像中

像这样:

r = cv2.boundingRect(contour)
crop_img = im[r[1]:r[1]+r[3], r[0]:r[0]+r[2]]
cv2.imwrite('roi.png', crop_img)

因为numpy切片需要y:y+h,x:x+h

如果需要定向边界框,请使用minarerect

编辑:

你说你只想要米粒。因为任何图像都是矩形的,所以总是有一些背景。你可以把背景漆成黑色:

  • 用原始图像的大小创建一个黑色图像(有许多米粒的图像)
  • drawContours(),厚度=CV_填充(或任何负数),颜色为白色。它应该是黑色的图像,只有一个白色的米粒。我们称之为“面具”
  • 然后对原始图像和“蒙版”进行逐位“和”
  • 然后进行上面解释的裁剪(boundingRect)

如果你想要所有的米粒,你应该把这些都放在里面

相关问题 更多 >