如何使用OpenCV和Python去除图片空白并裁剪至仅保留彩色鱼区域
去除图片空白区域并裁剪至彩色鱼的方法
对于新手来说,**Pillow(PIL的分支)**是最易用的图像处理库,操作简单且代码量少;如果后续想深入学习图像处理,也可以试试OpenCV的简化用法,下面分别介绍两种方法:
方法一:用Pillow快速裁剪(推荐新手)
- 先安装Pillow:
pip install pillow
- 直接运行以下代码,替换成你的图片路径即可:
from PIL import Image # 打开目标图片 img = Image.open("wpIKP.jpg") # 转成灰度图,方便识别空白区域(空白为纯白色,灰度值255) gray_img = img.convert("L") # 自动获取非空白区域的最小包围框,返回(left, top, right, bottom)四个坐标 bbox = gray_img.getbbox() # 根据边界框裁剪图片 cropped_img = img.crop(bbox) # 保存裁剪后的图片 cropped_img.save("cropped_fish.jpg") # 直接查看裁剪结果(可选) cropped_img.show()
getbbox()会自动识别所有非纯白区域的范围,一步就能得到只包含彩色鱼的裁剪区域,完全不用手动调参数,对新手非常友好。
方法二:用OpenCV裁剪(适合进阶学习)
如果之后想接触更多图像处理功能,OpenCV是个不错的选择,代码逻辑也很清晰:
- 安装依赖:
pip install opencv-python numpy
- 示例代码:
import cv2 import numpy as np # 读取图片 img = cv2.imread("wpIKP.jpg") # 转灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 标记出非空白的区域(空白是纯白色,所以取灰度值小于255的部分) non_white_mask = gray < 255 # 获取非空白区域的上下左右边界坐标 y_coords, x_coords = np.where(non_white_mask) top, bottom = y_coords.min(), y_coords.max() left, right = x_coords.min(), x_coords.max() # 裁剪图片(注意OpenCV的坐标顺序是[y_start:y_end, x_start:x_end]) cropped_img = img[top:bottom+1, left:right+1] # 保存结果 cv2.imwrite("cropped_fish_cv2.jpg", cropped_img) # 显示结果(按任意键关闭窗口) cv2.imshow("裁剪后的鱼", cropped_img) cv2.waitKey(0) cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者sandeep4o1
相关产品推荐
相关产品推荐

