裁剪图像python的边框
Posted
技术标签:
【中文标题】裁剪图像python的边框【英文标题】:crop the border of image python 【发布时间】:2018-12-09 03:56:23 【问题描述】:我有这张照片
我想像这样裁剪它
我使用此代码,但它不会裁剪黑色边框。那么,有人可以帮帮我吗?
im = cv2.imread("Data/"+file, 0)
retval, thresh_gray = cv2.threshold(im, thresh=100, maxval=255, type=cv2.THRESH_BINARY)
points = np.argwhere(thresh_gray==0)
points = np.fliplr(points)
x, y, w, h = cv2.boundingRect(points)
crop = im[y:y+h, x:x+w] # create a crop
retval, thresh_crop = cv2.threshold(crop, thresh=200, maxval=255, type=cv2.THRESH_BINARY)
path = 'D:\Picture\Camera Roll'
cv2.imwrite(os.path.join(path , file),thresh_crop)
【问题讨论】:
【参考方案1】:我认为您可以将contours 用于您的解决方案 轮廓是连接相同强度的连续点的曲线/线。因此,包含书面脚本的框是一个轮廓。图像中的轮廓也具有关系,例如一个轮廓可能是其他轮廓的父级。在您的图像中,该框可能是书面脚本的父级。
cv2.findContours 查找图像中的所有轮廓,第二个参数(cv2.RETR_TREE)是提到应该返回什么样的关系。由于轮廓具有层次结构,因此该框很可能位于轮廓列表的索引 0 或 1 中。
import matplotlib.pyplot as plt
%matplotlib inline
img = cv2.imread('image.png', 0)
ret, thresh = cv2.threshold(img, 127, 255, 0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
虽然第一个轮廓(contours[0]) 代表盒子,但由于某种原因它是第二个。
img_copy = img.copy()
cnt= contours[1]
cv2.drawContours(img_copy, [cnt], -1, color = (255, 255, 255), thickness = 20)
plt.imshow(img_copy, 'gray')
得到轮廓后,只需在轮廓上画一条粗白线即可移除框。这是一个solution 在图像上绘制特定轮廓
不用担心这些图片中的边界框。这只是matplotlib。您的图像是坐标框内的内容。
【讨论】:
@AmyDafe 哦,我明白了。您能否在您的问题中也提及这一点,以便其他人意识到这一点?我也会尝试找到解决这个问题的方法 啊我忘了说对不起。不过谢谢你的回答 它没有:(我想我会用边框。谢谢你的帮助。我真的很感激:)以上是关于裁剪图像python的边框的主要内容,如果未能解决你的问题,请参考以下文章