python - 是否有任何功能可以在 opencv 或其他包中裁剪二进制图像?
问题描述
我只是在处理图像,我发现自动裁剪二进制图像很困难。我是图像处理的新手。示例图像如下所示,
原图:
需要的输出(由 GIMP 图像编辑器手动编辑):
我需要通过在图像中找到一个白色像素(蒙版)的边缘来裁剪图像。但是很难找到近似的边缘。请帮我找出来。
提前致谢..!
解决方案
您可以使用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()
推荐阅读
- android - Android Gradle Flavor 值取决于其他风味维度
- github - github api可以降低请求吗?
- firebase - 使用对话流从数据存储中读取数据
- java - 等到 JQuery .replaceWith 完成
- postgresql - 如何让外键引用一组记录,或避免这种情况
- python-imaging-library - 只打开 JPEG 的左上角?
- uitableview - SwiftUI 如何包装 WKWebView 以使其在 html 加载后自动调整大小
- java - 如何避免switch语句?
- java - PostgreSQL 列中映射的 Java LocalDate / LocalDateTime 字段的问题
- python - 如何制作更有效的代码来搜索熊猫列中的多个字符串