OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域
- 一、改变图像大小
* - 1、获取图像宽、高、通道数
- 2、resize函数
- 3、案例
- 二、ROI感兴趣区域
* - 1、感兴趣区域的定义
- 2、opencv-python中的ROI提取
- 3、案例
- 三、结合应用:深度学习数据增强方法之一
一、改变图像大小
1、获取图像宽、高、通道数
具体方法如下所示:
print(img.shape[0])
print(img.shape[1])
print(img.shape[2])
2、resize函数
opencv-python提供了resize函数用于改变整体的图像大小,函数如下所示。
cv2.resize(图像 ,(w, h), fx=倍数, fy=倍数)
其中(w,h)可直接更改图像大小, w指图像的宽width,h指图像的高height。
fx 和 fy则是通过倍数使图像的宽或高成倍增大或减小。
具体使用方法如下所示:
cv2.resize(img, (w, h))
cv2.resize(img, (0, 0), fx=num1, fy=num2)
结合上获取图像的宽高也可通过w、h对图像大小进行倍数的改变,如下所示:
cv2.resize(img, (int(img.shape[1]*num1), int(img.shape[0]*num2)))
需要注意的是图像宽高一定为整数,因此要加上int()将值改为整数,保证类型正确,否则将会出现如下错误。
Can't parse 'dsize'. Sequence item with index 0 has a wrong type
3、案例
原图分辨率为712 * 709,改变后一张图像为300 * 300,一张图像的宽高都为原图的1/2。具体程序如下所示:
import cv2
if __name__ == '__main__':
while True:
img = cv2.imread('img/1.jpg', 1)
img_wh = cv2.resize(img, (300, 300))
img_fxy = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
cv2.imshow("img", img)
cv2.imshow("img_wh", img_wh)
cv2.imshow("img_fxy", img_fxy)
cv2.waitKey(1)
效果如下所示:
二、ROI感兴趣区域
1、感兴趣区域的定义
当我们通过摄像头或者其他方式从复杂的环境中获取到一帧图像时,图像中包含着许多我们不感兴趣的信息,如果我们对整张图像进行处理,往往非常繁琐,如果没有足够的经验则会很容易将代码写死。所以在场景和需求允许的情况下,可以尝试在图像处理前框定感兴趣的区域,这样能够有效降低程序的复杂程度,且能有效减少后续图像处理的时间。同时其也可以应用在图像处理的过程中,应需求而使用。
2、opencv-python中的ROI提取
提取ROI的方法如下所示:
img = cv2.imread()[y1:y2,x1:x2]
左上角坐标为(x1, y1),右下角坐标为(x2, y2)
3、案例
提取ROI前图像大小设定为600 * 600,而后提取感兴趣区域:左上角坐标为(200, 0),右下角坐标为(600, 400),即 y轴上由0至400,x轴上由200至600。具体程序如下所示:
import cv2
if __name__ == '__main__':
while True:
img = cv2.imread('img/1.jpg', 1)
img = cv2.resize(img, (600, 600))
img_ROI = img[0:400, 200:600]
cv2.imshow("img", img)
cv2.imshow("ROI", img_ROI)
cv2.waitKey(1)
效果如下所示:
三、结合应用:深度学习数据增强方法之一
如上述程序所示,以其为基础,通过再次resize即可将图像转换为原图尺寸,具体程序如下所示,这次将图像改变为300 * 300(SSD模型图像输入大小一般为300 * 300):
import cv2
if __name__ == '__main__':
while True:
img = cv2.imread('img/1.jpg', 1)
img = cv2.resize(img, (300, 300))
img_ROI = img[0:200, 100:300]
img_2 = cv2.resize(img_ROI, (img.shape[1], img.shape[0]))
cv2.imshow("img", img)
cv2.imshow("ROI", img_ROI)
cv2.imshow("img_2", img_2)
cv2.waitKey(1)
效果如下所示:
通过以上操作,可增加深度学习数据集的数据量,且在训练时进行图像裁剪(通常为 随机裁剪),可 防止训练出现过拟合。
本人是一名学生,目前正在学习中,本篇文章也算是我的学习笔记,如有错误的话还请指正。
Original: https://blog.csdn.net/xztli/article/details/126149578
Author: 笠li笠
Title: OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/632311/
转载文章受原作者版权保护。转载请注明原作者出处!