在opencv或其他软件包中是否有用于裁剪二进制映像的功能?

时间:2019-01-31 05:50:51

标签: python opencv image-processing mask

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

原始图片:

enter image description here

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

enter image description here

我需要通过查找图像中白色像素(遮罩)的边缘来裁剪图像。但是很难找到近似的边缘。请帮助我找出答案。

先谢谢..!

1 个答案:

答案 0 :(得分:0)

您可以使用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()

enter image description here

enter image description here