目录

  • 1 浅拷贝
  • 2 深拷贝
  • 示例代码

有时我们只对一张图像中的部分区域感兴趣,而原图像又比较大,如果带着非感兴趣区域一起处理会占用大量的内存,因次我们希望从原图像中截取部分图像后再进行处理。我们将这个区域称为感兴趣区域(Region Of Interest, ROI),Python中的ROI可以通过NumPy中的索引实现。但是通过索引获取ROI的方式为浅拷贝。下文将分别介绍浅拷贝和深拷贝的方式以及其区别。

1 浅拷贝

ROI = img[x1: x2, y1: y2]

其中各参数的含义如下:
ROI:提取的感兴趣区域的结果
img:待提取的感兴趣区域所在的图像
x1:感兴趣区域在原图像中左上角的x坐标
x2:感兴趣区域在原图像中右下角的x坐标
y1:感兴趣区域在原图像中左上角的y坐标
y2:感兴趣区域在原图像中右下角的y坐标

通过这种提取ROI区域的方式为浅拷贝。浅拷贝只是建立了一个访问图像数据的变量。通过这种方式访问的是原图像,如果改变了感兴趣区域的数据,原图像也会发生改变。

通过“=”进行赋值的方式都是浅拷贝,在实际应用中要尽量避免直接在原图像上进行操作。

2 深拷贝

深拷贝在创建变量的同时会在内存中分配新的地址,用于存储数据,因此通过原变量访问的数据地址和通过新变量访问的数据地址不相同,即使改变了其中一个,另一个也不会改变。深拷贝可以通过copy()函数实现。

a = b.copy()

其中各参数的含义如下:
a:拷贝结果
b:原拷贝区域。

示例代码

import cv2 as cv
import sysif __name__ == '__main__':# 读取图像并判断是否读取成功img = cv.imread('../images/sky.jpg')BDD = cv.imread('../images/BDD.jpg')if img is None or BDD is None:print('Failed to read sky.jpg or BDD.jpg.')sys.exit()mask = cv.resize(BDD, (20, 20))# 深拷贝img1 = img.copy()# 浅拷贝img2 = img# 截取图像的ROI区域ROI = img[30: 150, 30: 150]# 深拷贝ROI_copy = ROI.copy()# 浅拷贝ROI1 = ROIimg[100: 120, 100: 120] = mask# 展示结果cv.imshow('img + BDD1', img1)cv.imshow('img + BDD2', img2)cv.imshow('ROI copy1', ROI_copy)cv.imshow('ROI copy2', ROI1)# 在图像中绘制圆形img = cv.circle(img, (100, 100), 10, (0, 0, 255), -1)# 展示结果cv.imshow('img + circle1', img1)cv.imshow('img + circle2', img2)cv.imshow('ROI circle1', ROI_copy)cv.imshow('ROI circle2', ROI1)cv.waitKey(0)cv.destroyAllWindows()

代码运行结果如下图所示。

下一篇将会介绍OpenCV中窗口交互操作。

OpenCV学习笔记(六)——感兴趣区域ROI(浅拷贝与深拷贝的区别)相关推荐

  1. opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  2. python二值化 感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法

    方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...

  3. C/C++ OpenCV设置感兴趣区域ROI

    设置感兴趣区域(ROI,region of interest),来专注或者简化工作过程,也就是从图像中选择一个图像区域,这个区域是 图像分析所关注的重点.我们圈定的这个区域,以便进行进一步处理 定义R ...

  4. python提取图片感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法

    方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...

  5. 【QtOpenCV 图像的感兴趣区域ROI】

    图像的ROI(region of interest)是指图像中感兴趣区域.在OpenCV中图像设置图像ROI区域,实现只对ROI区域操作. 文章目录 前言 一.GUI 二.实现代码 1.Rubber ...

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

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

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

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

  8. C# opencvSharp实现鼠标移动选择感兴趣区域(ROI)

    C# opencvSharp实现鼠标移动选择感兴趣区域(ROI)主要通过鼠标响应事件来实现. 1.鼠标按下响应 MouseDown() 获取鼠标按下的开始坐标. private void pictur ...

  9. opencv学习笔记5:感兴趣区域ROI

    ROI ROI 感兴趣区域 从被处理的图像以方框,圆,不规则多边形等勾勒出我们感兴趣的区域. 可以通过各种算子(Operator)和函数来求得感兴趣的区域. 本次通过下标的形式获取ROI ROI 下标 ...

最新文章

  1. python Elasticsearch update
  2. matlab脉宽调制pwm,PWM脉宽调制直流调速系统设计及MATLAB仿真验证
  3. python学习历程-安装篇(一)
  4. boost::system::generic_category相关的测试程序
  5. OpenGL 分层渲染Layered Rendering的实例
  6. 使用jupyter计算正态分布_专栏 | 基于 Jupyter 的特征工程手册:数据预处理(三)...
  7. c9, Performance Monitor Control Register
  8. opencv 修改图像数值_【1】Introduction to OpenCV (2)使用VS生成OpenCV应用程序
  9. C++基础知识:C++语言中的表达式求值
  10. php制作闹钟,简易闹钟 - 按键精灵资源站 按键精灵教程,学习脚本制作,脚本大全,视频教程...
  11. 数字信号处理实验集合
  12. 超详细讲解ArcGIS拓扑分析(附路网练习数据下载)
  13. 电商与硬件——从购买电脑的角度学计算机硬件基础
  14. js设置北京时区_JavaScript 实现北京时间转其他时区时间,根据系统对对应时区转换...
  15. Android全面解析之Window机制
  16. Image Processing in the Spatial Domain 空间域图像处理
  17. java开发工程师p2级别_java开发工程师p2级别_Java程序员等级怎么划分?
  18. 《软件工程与计算》考试复习笔记
  19. VR科技赋能智慧冬奥
  20. 数据库 Database

热门文章

  1. 如何开启联想Y7000/P/K/X系列电池养护保护模式
  2. 与你有关!高铁站采用的室内定位技术让你更有安全感
  3. U2Net论文解读及代码测试
  4. 服务器装win10性能,服务器可以装win10吗
  5. 计算机学院副院长竞聘稿,抓住机遇有所作为计算机系副主任竞职演说竞职演讲精选范文...
  6. 《童虎学习笔记》5分钟Citus之SQL命令参考
  7. FPGA verilog 临近插值任意比例视频缩小代码
  8. [Unity]关于Unity创建项目没有sln文件的问题
  9. 【算法专题】开关问题
  10. 存储介质中ext4的文件排布