首页 > 解决方案 > 是否有任何功能可以在 opencv 或其他包中裁剪二进制图像?

问题描述

我只是在处理图像,我发现自动裁剪二进制图像很困难。我是图像处理的新手。示例图像如下所示,

原图:

在此处输入图像描述

需要的输出(由 GIMP 图像编辑器手动编辑):

在此处输入图像描述

我需要通过在图像中找到一个白色像素(蒙版)的边缘来裁剪图像。但是很难找到近似的边缘。请帮我找出来。

提前致谢..!

标签: pythonopencvimage-processingmask

解决方案


您可以使用findContours来查找对象的边界,然后使用minAreaRect来绘制您需要的输出,即第一张图像。或者您可以只绘制对象的边界,即第二张图像。

import cv2
import numpy as np

img = cv2.imread('1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

_,thresh = cv2.threshold(gray,128,255,cv2.THRESH_BINARY)

_,contours,_ = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

mask = np.zeros(img.shape)

cv2.drawContours(mask, contours, -1 , (255,255,255), 1)

rect = cv2.minAreaRect(contours[0])
box = cv2.boxPoints(rect)

box = np.int0(box)
cv2.drawContours(img,[box],0,(255,255,255),1)

cv2.imshow("img",img)
cv2.imshow("mask",mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

在此处输入图像描述

在此处输入图像描述


推荐阅读