OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域

OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域

一、改变图像大小

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()将值改为整数,保证类型正确,否则将会出现如下错误。

OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域
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)

效果如下所示:

OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域

二、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)

效果如下所示:

OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域

三、结合应用:深度学习数据增强方法之一

如上述程序所示,以其为基础,通过再次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)

效果如下所示:

OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域
通过以上操作,可增加深度学习数据集的数据量,且在训练时进行图像裁剪(通常为 随机裁剪),可 防止训练出现过拟合

本人是一名学生,目前正在学习中,本篇文章也算是我的学习笔记,如有错误的话还请指正。

Original: https://blog.csdn.net/xztli/article/details/126149578
Author: 笠li笠
Title: OpenCV python(二)图像预处理:改变图像大小 && 提取感兴趣区域

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/632311/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球