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

标签 python opencv

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

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

最佳答案

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

像这样:

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 slice 期望y:y + h,所以x:x + h

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

编辑:

您说只想要米粒。由于任何图像都是矩形的,因此您始终会有一些背景。您可以做的是将背景涂成黑色:
  • 创建一个具有原始图像大小的黑色图像(带有许多米粒的图像)
  • drawContours(),厚度= CV_FILLED(或任何负数),颜色为白色。它应该是黑色的图像,白色只有一个米粒。我们称其为“掩码”
  • 然后执行原始图像的bitwise_and和“mask”
  • 然后做上面
  • 解释的裁剪(boundingRect)

    如果您想吃所有的米饭,就应该在里面做所有的事情。

    关于python - 在找到的边界python opencv中提取内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48648250/

    相关文章:

    python - 从 csv 文件 : Error IO operation on closed file 中获取数据

    python - opencv消除噪音/用canny检测网络

    python - 如何在不渲染模板的情况下将python变量传递给flask中的html

    python - 如何处理 f 字符串中的错误?

    python - '如果' vs. `while` 到 `functools.partial.func`

    python - OpenCV 背景减除以改进检测

    python - 如何使用 numpy 将 R、G、B 值提取到单独的数组中

    python - 为什么我的轮廓没有关闭(Python,OpenCV)?

    python - 带有额外模块的 OpenCV 3.0.0 - imgproc 依赖

    python - 在python中读取二进制数据