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

  • 一、改变图像大小
    • 1、获取图像宽、高、通道数
    • 2、resize函数
    • 3、案例
  • 二、ROI感兴趣区域
    • 1、感兴趣区域的定义
    • 2、opencv-python中的ROI提取
    • 3、案例
  • 三、结合应用:深度学习数据增强方法之一

一、改变图像大小

1、获取图像宽、高、通道数

具体方法如下所示:

print(img.shape[0])  # 图片高height
print(img.shape[1])  # 图片宽width
print(img.shape[2])  # 图片通道数

2、resize函数

opencv-python提供了resize函数用于改变整体的图像大小,函数如下所示。

cv2.resize(图像 ,(w, h), fx=倍数, fy=倍数)   #改变图像shape

其中(w,h)可直接更改图像大小,w指图像的宽width,h指图像的高height
fx 和 fy则是通过倍数使图像的宽或高成倍增大或减小。

具体使用方法如下所示:

cv2.resize(img, (w, h))      # 指定宽高改变图像大小
cv2.resize(img, (0, 0), fx=num1, fy=num2)     # 指定倍数改变图像大小
# num1、num2为倍数

结合上获取图像的宽高也可通过w、h对图像大小进行倍数的改变,如下所示:

cv2.resize(img, (int(img.shape[1]*num1), int(img.shape[0]*num2)))        # 指定宽高改变图像大小
# num1、num2为倍数

需要注意的是图像宽高一定为整数,因此要加上int()将值改为整数,保证类型正确,否则将会出现如下错误。

Can't parse 'dsize'. Sequence item with index 0 has a wrong type

3、案例

原图分辨率为712 * 709,改变后一张图像为300 * 300,一张图像的宽高都为原图的1/2。具体程序如下所示:

import cv2  # 导入opencv库if __name__ == '__main__':while True:img = cv2.imread('img/1.jpg', 1)    # 获取路径img/0.jpg的图像,图像类型为RGB图像# 此处为改变图像大小img_wh = cv2.resize(img, (300, 300))  # 通过w、h改变图像大小img_fxy = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)  # 通过fx、fy改变图像大小cv2.imshow("img", img)     # 显示原图cv2.imshow("img_wh", img_wh)  # 显示w、h改变后的图cv2.imshow("img_fxy", img_fxy)  # 显示fx、fy改变后的图cv2.waitKey(1)  # 等待时间

效果如下所示:

二、ROI感兴趣区域

1、感兴趣区域的定义

当我们通过摄像头或者其他方式从复杂的环境中获取到一帧图像时,图像中包含着许多我们不感兴趣的信息,如果我们对整张图像进行处理,往往非常繁琐,如果没有足够的经验则会很容易将代码写死。所以在场景和需求允许的情况下,可以尝试在图像处理前框定感兴趣的区域,这样能够有效降低程序的复杂程度,且能有效减少后续图像处理的时间。同时其也可以应用在图像处理的过程中,应需求而使用。

2、opencv-python中的ROI提取

提取ROI的方法如下所示:

img = cv2.imread()[y1:y2,x1:x2] #ROI区域

左上角坐标为(x1, y1),右下角坐标为(x2, y2)

3、案例

提取ROI前图像大小设定为600 * 600,而后提取感兴趣区域:左上角坐标为(200, 0),右下角坐标为(600, 400),即y轴上由0至400,x轴上由200至600。具体程序如下所示:

import cv2  # 导入opencv库if __name__ == '__main__':while True:img = cv2.imread('img/1.jpg', 1)    # 获取路径img/0.jpg的图像,图像类型为RGB图像img = cv2.resize(img, (600, 600))  # 通过w、h改变图像大小img_ROI = img[0:400, 200:600]   # 提取感兴趣区域cv2.imshow("img", img)  # 显示w、h改变后的图cv2.imshow("ROI", img_ROI)  # 显示感兴趣区域cv2.waitKey(1)  # 等待时间

效果如下所示:

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

如上述程序所示,以其为基础,通过再次resize即可将图像转换为原图尺寸,具体程序如下所示,这次将图像改变为300 * 300(SSD模型图像输入大小一般为300 * 300):

import cv2  # 导入opencv库if __name__ == '__main__':while True:img = cv2.imread('img/1.jpg', 1)    # 获取路径img/0.jpg的图像,图像类型为RGB图像img = cv2.resize(img, (300, 300))  # 通过w、h改变图像大小img_ROI = img[0:200, 100:300]   # 提取感兴趣区域img_2 = cv2.resize(img_ROI, (img.shape[1], img.shape[0]))     # 改变为原本图像大小cv2.imshow("img", img)  # 显示w、h改变后的图cv2.imshow("ROI", img_ROI)  # 显示感兴趣区域cv2.imshow("img_2", img_2)  # 显示最终图像cv2.waitKey(1)  # 等待时间

效果如下所示:

通过以上操作,可增加深度学习数据集的数据量,且在训练时进行图像裁剪(通常为随机裁剪),可防止训练出现过拟合

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

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

  1. 提取图像感兴趣区域_从图像中提取感兴趣区域

    提取图像感兴趣区域 Welcome to the second post in this series where we talk about extracting regions of intere ...

  2. ITK:在一幅图像中提取感兴趣区域ROI

    ITK:在一幅图像中提取感兴趣区域ROI 内容提要 输出结果 C++实现代码 内容提要 在给定图像中提取给定的关注区域(ROI) 输出结果 C++实现代码 #include "itkImag ...

  3. Python-OpenCV选择、提取感兴趣区域(ROI区域)

    Python-OpenCV选择.提取感兴趣区域(ROI区域) 在图像处理中,我们常常要对某个区域进行选择.提取,然后对这个区域进行单独分析.处理.显示. 这样的区域我们称为叫ROI区域,英文全称为Re ...

  4. OpenCV精进之路(十一):感兴趣区域ROI和logo添加技术

    在图像处理领域,有一个非常重要的名词ROI. 什么是ROI? 它的英文全称是Region Of Interest,对应的中文解释就是感兴趣区域. 感兴趣区域,就是我们从图像中选择一个图像区域,这个区域 ...

  5. OpenCV-C++选择、提取感兴趣区域(ROI区域)【附用鼠标选取ROI区域的代码】

    在图像处理中,我们常常要对某个区域进行选择.提取,然后对这个区域进行单独分析.处理.显示. 这样的区域我们称为叫ROI区域,英文全称为Region of interest,中文名为"感兴趣区 ...

  6. Opencv 学习笔记之——鼠标操作画出感兴趣区域

     本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者 ...

  7. 使用 OpenCV 和 Tesseract 对图像中的感兴趣区域 (ROI) 进行 OCR

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,我们将使用 OpenCV 在图像的选定区域上应用 O ...

  8. openCV任意几何形状感兴趣区域(ROI)提取

    图像感兴趣区域(ROI)提取主要使用掩模来进行.掩模是二值图像,感兴趣区域的掩模值设置为255,非感兴趣区域的掩模值为0 获取掩模的方法主要有两种 方法一 使用opencv中Mat函数方法,调用Mat ...

  9. OpenCV学习笔记(六)——感兴趣区域ROI(浅拷贝与深拷贝的区别)

    目录 1 浅拷贝 2 深拷贝 示例代码 有时我们只对一张图像中的部分区域感兴趣,而原图像又比较大,如果带着非感兴趣区域一起处理会占用大量的内存,因次我们希望从原图像中截取部分图像后再进行处理.我们将这 ...

最新文章

  1. Java读取Excel文件并将之写入数据库操作
  2. Mysql事务以及加锁机制事务的特征ACID
  3. 【高清】网络安全思维导图
  4. [2020.11.25NOIP模拟赛]下棋【dp】
  5. USACO-Section1.5 Mother's Milk (深度优先搜索)
  6. ajax jsonp img
  7. oracle 约束 年份,如何在Oracle中确定给定年份是否为Le年?
  8. centos7下源码安装mysql5.6_Centos7 源码安装mysql5.6
  9. 一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误。
  10. 开课吧课堂:Java的内置异常汇总列表!
  11. 为什么不要用System.out.println()
  12. Linux定时任务的基础操作
  13. 【概率论】范畴分布 Categorical / Multinoulli Distribution
  14. 蚁群算法及蚂蚁系统的原理(js实现版)
  15. 注册表:更改键盘扫描码映射
  16. 计算机系统集成内容实习报告,网络系统集成的实习报告.docx
  17. vue antd table customRender 自定义标签
  18. 【系统分析师之路】第六章 多媒体基础知识
  19. windows共享文件创建----局域网办公
  20. 生活感悟:租房合同代审查

热门文章

  1. 笔记︱联邦学习与隐私计算的案例集锦(一)
  2. 安全合规/GDPR--23--研究:GDPR风险评估与组织架构保障
  3. asp.net中获取当前url的方法(转)
  4. 常用数学符号 希腊字母
  5. [紫书CH0] 《算法竞赛入门经典》(第2版) 题解目录
  6. 求职材料准备-入门导读
  7. select2中文选项通过拼音或者首字母快速定位选项
  8. 【数字孪生】数字孪生模型在产品构型管理中应用探讨;不可忽视的轻量级三维可视化技术...
  9. Raphael.js 在vue中使用说明, 以杭州市地图为例
  10. Java中的IO流与Properties