首页 飞桨领航团 帖子详情
【AI达人养成营】OpenCV的部分函数功能笔记
收藏
快速回复
飞桨领航团 文章AI达人创造营 344 2
【AI达人养成营】OpenCV的部分函数功能笔记
收藏
快速回复
飞桨领航团 文章AI达人创造营 344 2

用 Numpy 的切片方法可以进行图像的裁剪,操作简单方便。

对图像 img 裁剪并返回指定的矩阵区域图像。

参数说明:

img:图像数据,nparray 多维数组
x, y:整数,像素值,裁剪矩形区域左上角的坐标值
w, h:整数,像素值,裁剪矩形区域的宽度、高度
返回值 retval:裁剪后获得的 OpenCV 图像,nparray 多维数组

 

注意事项:

Numpy 多维数组的切片是原始数组的浅拷贝,切片修改后原始数组也会改变。推荐采用 .copy() 进行深拷贝,得到原始图像的副本。
Numpy 数组切片,当上界或下界为数组边界时可以省略,如:img[y:, :x] 表示高度方向从 y 至图像底部(像素ymax),宽度方向从图像左侧(像素 0)至 x。

 

使用 cv2.selectROI(),可以实现对 ROI 的裁剪,详见例程 1.17。

# 1.17 图像的裁剪 (ROI)
img1 = cv2.imread("../images/imgLena.tif", flags=1) # flags=1 读取彩色图像(BGR)

roi = cv2.selectROI(img1, showCrosshair=True, fromCenter=False)
xmin, ymin, w, h = roi # 矩形裁剪区域 (ymin:ymin+h, xmin:xmin+w) 的位置参数
imgROI = img1[ymin:ymin+h, xmin:xmin+w].copy() # 切片获得裁剪后保留的图像区域

cv2.imshow("DemoRIO", imgROI)
cv2.waitKey(0)

0
收藏
回复
全部评论(2)
时间顺序
玥亮
#2 回复于2021-12

学到了,感谢大佬的分享

0
回复
DeepGeGe
#3 回复于2021-12

分享一个小技巧:

使用opencv读写(cv2.imread和cv2.imwrite)图片是不支持中文路径的,可以使用下面的方式读写以兼容中文路径:

# 读取图片(这种方式兼容中文路径)
img = cv2.imdecode(np.fromfile('包含中文的图片路径', dtype=np.uint8), cv2.IMREAD_COLOR)
# 写入图片(这种方式兼容中文路径)
cv2.imencode('.jpg', img)[1].tofile('可以包含中文的图片存储路径')
0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户