为什么通过设置ROI无法修改图像(opencv)
来源:互联网 发布:淘宝直通车在哪开 编辑:程序博客网 时间:2024/05/16 06:35
项目中的一个小功能,需要实现视频特定区域的背景替换,遂写下这样一个函数:
void bgReplace(Mat& dst, Mat&bg, Rect rec){ assert(dst.size()==bg.size()); assert(dst.depth() == bg.depth()); dst(rec) = bg(rec).clone();//可深可浅}
功能,用rec指定需要替换的区域,用bg的该区域值替换dst的该区域值。
但是,出乎意料的是这个函数什么也没做,根本没有达到预期,按我所想,对ROI 区域的一切操作就是对源图像的直接操作啊,因为两者是共享同一块内存区域啊,而且我还用了深复制,然而,真是想多了。
具体原因,我们可以将程序分解一下再看:
void bgReplace(Mat& dst, Mat&bg, Rect rec){ assert(dst.size()==bg.size());//1 assert(dst.depth() == bg.depth());//2 Mat tmp=dst(rec);//3 tmp= bg(rec);//可深可浅//4}
在3句执行完后,tmp和dst共享同一块数据,但是在4句执行完时,tmp是和bg共享同一块数据,而不是dst,这里只是进行了一次矩阵头信息的改变,并未改变原始数据。
修改后程序为:
void bgReplace(Mat& dst, Mat&bg, Rect rec){ assert(dst.size()==bg.size()); assert(dst.depth() == bg.depth()); bg(rec).copyTo(dst(rec));//可深可浅}
问题很简单,只因自己犯了错误。
阅读全文
0 0
- 为什么通过设置ROI无法修改图像(opencv)
- OpenCV通过设置ROI将图像平均分成N等分
- OpenCV中图像设置ROI
- OpenCV:设置图像的感兴趣区域(ROI)
- opencv----图像显示、ROI
- 【OpenCV】通过ROI区域以及掩码实现图像叠加
- OpenCV中Mat类的图像如何设置ROI
- openCV中Mat类的图像如何设置ROI
- OpenCV笔记5:设置图像的感兴趣区域(ROI)
- OpenCV设置感兴趣区域ROI,对图像进行局部处理
- OpenCV学习笔记_对图像设置ROI
- OpenCV中Mat类的图像如何设置ROI
- OpenCV中Mat类的图像如何设置ROI
- OpenCV中Mat类的图像如何设置ROI
- OpenCV + Java(Android) 设置ROI
- opencv设置ROI
- opencv设置ROI
- OpenCV :ROI设置
- Android JNI开发(10)--实例
- 欢迎使用CSDN-markdown编辑器
- mac上mysql root密码忘记或权限错误的解决办法
- mac执行SVN命令出现xcrun: error: invalid active developer path解决方法
- linux 搭建redis集群
- 为什么通过设置ROI无法修改图像(opencv)
- Java设计模式之装饰器模式
- TCGA数据文件下载
- TX2刷机问题
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集
- 如何更新当前系统的npm和node版本 (on windows)
- [grunt] grunt 配置babel es6转码
- 编程式路由和命名式路由
- Linux_Casperjs_Phantomjs 安装笔记