OpenCV2 移除图像白色边框并裁剪 - 代码示例
以下是使用 OpenCV2 移除图像四周白色边框并裁剪剩余部分的代码示例:
import cv2
# 读取图片
img = cv2.imread('image.jpg')
# 将图像转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算图像边框
_, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
x, y, w, h = cv2.boundingRect(contours[0])
# 裁剪图像
crop = img[y:y+h, x:x+w]
# 保存剩余部分的图片
cv2.imwrite('cropped_image.jpg', crop)
在这个代码中,我们首先读取一张图片,并将其转换为灰度图。然后使用阈值化操作找到了图像的边框,并计算出了边框的位置和大小。最后,我们使用 numpy 的切片操作对图像进行裁剪,并将剩余的部分保存成一张新的图片。
代码解释:
cv2.imread():读取图片文件。cv2.cvtColor():将图片转换为灰度图。cv2.threshold():将灰度图像进行阈值化,将像素值大于阈值的设置为白色,小于阈值的设置为黑色,从而找到图像边框。cv2.findContours():查找图像中的轮廓,cv2.RETR_EXTERNAL表示只查找外部轮廓,cv2.CHAIN_APPROX_SIMPLE表示压缩轮廓,只保留轮廓的起点和终点。cv2.boundingRect():计算轮廓的外接矩形,返回矩形的左上角坐标 (x, y)、宽度 w 和高度 h。img[y:y+h, x:x+w]:使用 numpy 的切片操作裁剪图像,y:y+h表示从 y 行开始到 y+h 行结束,x:x+w表示从 x 列开始到 x+w 列结束。cv2.imwrite():保存裁剪后的图片。
注意:
- 该代码示例假设图像四周的白色边框是连续的,且像素值大于 240。
- 可以根据实际情况调整阈值和裁剪参数。
原文地址: https://www.cveoy.top/t/topic/oWTB 著作权归作者所有。请勿转载和采集!