ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:377.88KB ,
资源ID:28865141      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28865141.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OpenCV区域图像ROI和整体局部图像混合.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OpenCV区域图像ROI和整体局部图像混合.docx

1、OpenCV区域图像ROI和整体局部图像混合感兴趣区域:ROI在图像处理领域中,专业名词感兴趣的区域其实就是选取指定区域的图像。选择指定区域图像中提取感兴趣区域(Region of interest)有两种方法:方法一:使用构造函数/创建宽度为 320,高度为 240 的 3 通道图像Mat img(Size(320, 240), CV_8UC3);/roi 是表示 img 中 Rect(10, 10, 100, 100)区域的对象Mat roi(img, Rect(10, 10, 100, 100);方法二:使用括号运算符Mat roi2 = img(Rect(10, 10, 100, 10

2、0);/ 用括号运算符Mat roi3 = img(Range(10, 100), Range(10, 100); / 用构造函数Mat roi4(img, Range(10, 100), Range(10, 100);测试代码cv:Mat srcMat;QString fileName = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg;srcMat = cv:imread(fileName.toStdString();if(!srcMat.data) qDebug() _FILE_ _LINE_ F

3、ailed to load image: fileName; return;cv:imshow(orgin mat, srcMat);cv:Mat roiMat = srcMat(cv:Range(srcMat.rows/2 - 50, srcMat.rows/2 + 50), cv:Range(srcMat.cols/2 - 30, srcMat.cols/2 + 30);cv:imshow(roi mat, roiMat);cv:waitKey(0);测试效果图像混合(整体混合)图像混合有多种方式。线性混合线性混合操作是一种典型的二元(两个输入)的像素操作,它的理论公式如下: G(x) =

4、 (1-a)F1(x) + aF2(x)a代表透明度的值(0.01.0)对两幅图像(F1和F2)活两段视频产生时间上的画面叠化效果,前面页面切换至后面页面的一个切换过程。线性混合过程主要使用addWeighted函数。计算数组加权和:addWeighted()函数这个函数的作用是计算两个mat的加权和,当然读者可以自己遍历像素计算。该函数的原型如下:CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, in

5、t dtype = -1);参数一:输入图像1,mat类型参数二:alpha值,表示图像1的权重参数三:输入图像2,mat类型参数四:beta值,表示图像2的权重参数五:gamma值,一个加到权重总和上的标量值参数六:输出图像dst,mat类型,它与输入的两个mat尺寸和通道相同参数七:dtype,输出陈列的可选深度,默认值-1,当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。以上函数的计算公式如下:dst = src1I * alpha + src2I * beta + gamma;其中I为元素位置的索引值,当遇到多通道mat的时候,每个通道都

6、需要独立的进行处理。注意:当输出mat的深度为CV_32S时,这个函数不使用,会导致内存溢出或者算出的结果错误。测试代码/ 测试线性混合: 正向 与 x轴翻转后的线性混合cv:Mat mat1;cv:Mat mat2;cv:Mat mat3;QString fileName1 = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg;QString fileName2 = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.bmp

7、;mat1 = cv:imread(fileName1.toStdString();mat2 = cv:imread(fileName2.toStdString();if(!mat1.data | !mat2.data) qDebug() _FILE_ _LINE_ Failed to load image: fileName1 or = 1.0) a = 1.0; else if(key = 2) a -= 0.05; if(a 0.0) a = 0.0; 测试效果图像混合(局部混合)原理和方法参照图像混合(整体混合)。局部混合可以理解对感兴趣的区域进行混合,这里特别要注意一下:使用 mat

8、1 = mat2,其实mat1是mat2的副本(同一段数据);使用 mat1 = mat2(roi),其实mat1是mat2上roi区域的副本(同一段数据);使用 mat1 = mat2.clone(),mat1才是mat2的拷贝副本(两段相同数据);使用 mat1 = mat2(roi).clone(),mat1才是mat2上roi区域的的拷贝副本(两段相同数据);测试代码/ 测试线性混合: 正向 与 x轴翻转后的线性混合cv:Mat mat1;cv:Mat mat2;cv:Mat mat3;QString fileName1 = D:/qtProject/openCVDemo/openCV

9、Demo/modules/openCVManager/images/1.jpg;QString fileName2 = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.bmp;mat1 = cv:imread(fileName1.toStdString();mat2 = cv:imread(fileName2.toStdString();if(!mat1.data | !mat2.data) qDebug() _FILE_ _LINE_ Failed to load image: fileName1 or fi

10、leName2; return;/ 对mat2进行缩放,缩放至mat1的1/4的大小cv:resize(mat2, mat2, cv:Size(mat1.cols/2, mat1.rows/2);double a = 0.0;while(true) / mat4只是mat1的副本/ cv:Mat mat4 = mat1; cv:Mat mat4 = mat1.clone(); qDebug() _FILE_ _LINE_ mat1.cols/2 - mat1.cols/4 mat1.cols/2 + mat1.cols/4 mat1.rows/2 - mat1.rows/4 mat1.rows

11、/2 + mat1.rows/4; cv:Mat mat5 = mat4(cv:Range(mat1.rows/2 - mat1.rows/4, mat1.rows/2 + mat1.rows/4), cv:Range(mat1.cols/2 - mat1.cols/4, mat1.cols/2 + mat1.cols/4); qDebug() _FILE_LINE_; cv:addWeighted(mat5, a, mat2, (1.0-a), 0.0, mat5); qDebug() _FILE_= 1.0) a = 1.0; else if(key = 2) a -= 0.05; if(

12、a 0.0) a = 0.0; 测试效果Demo源码void OpenCVManager:testROIAndBlend()#define TEST_ROI (0) / roi#define TEST_BLEND (0) / 图像加权混合(全部区域)#define TEST_BLEND_ROI (1) / 图像加权混合(roi区域) #if TEST_ROI / 测试提取 cv:Mat srcMat; QString fileName = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg; srcMat

13、= cv:imread(fileName.toStdString(); if(!srcMat.data) qDebug() _FILE_ _LINE_ Failed to load image: fileName; return; cv:imshow(orgin mat, srcMat); cv:Mat roiMat = srcMat(cv:Range(srcMat.rows/2 - 50, srcMat.rows/2 + 50), cv:Range(srcMat.cols/2 - 30, srcMat.cols/2 + 30); cv:imshow(roi mat, roiMat); cv:

14、waitKey(0);#endif #if TEST_BLEND / 测试线性混合: 正向 与 x轴翻转后的线性混合 cv:Mat mat1; cv:Mat mat2; cv:Mat mat3; QString fileName1 = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg; QString fileName2 = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.bmp; mat1 = cv:imread(fil

15、eName1.toStdString(); mat2 = cv:imread(fileName2.toStdString(); if(!mat1.data | !mat2.data) qDebug() _FILE_ _LINE_ Failed to load image: fileName1 or = 1.0) a = 1.0; else if(key = 2) a -= 0.05; if(a 0.0) a = 0.0; #endif #if TEST_BLEND_ROI / 测试线性混合: 正向 与 x轴翻转后的线性混合 cv:Mat mat1; cv:Mat mat2; cv:Mat ma

16、t3; QString fileName1 = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg; QString fileName2 = D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.bmp; mat1 = cv:imread(fileName1.toStdString(); mat2 = cv:imread(fileName2.toStdString(); if(!mat1.data | !mat2.data) qD

17、ebug() _FILE_ _LINE_ Failed to load image: fileName1 or fileName2; return; / 对mat2进行缩放,缩放至mat1的1/4的大小 cv:resize(mat2, mat2, cv:Size(mat1.cols/2, mat1.rows/2); double a = 0.0; while(true) / mat4只是mat1的副本 / cv:Mat mat4 = mat1; cv:Mat mat4 = mat1.clone(); qDebug() _FILE_ _LINE_ mat1.cols/2 - mat1.cols/

18、4 mat1.cols/2 + mat1.cols/4 mat1.rows/2 - mat1.rows/4 mat1.rows/2 + mat1.rows/4; cv:Mat mat5 = mat4(cv:Range(mat1.rows/2 - mat1.rows/4, mat1.rows/2 + mat1.rows/4), cv:Range(mat1.cols/2 - mat1.cols/4, mat1.cols/2 + mat1.cols/4); qDebug() _FILE_LINE_; cv:addWeighted(mat5, a, mat2, (1.0-a), 0.0, mat5); qDebug() _FILE_= 1.0) a = 1.0; else if(key = 2) a -= 0.05; if(a 0.0) a = 0.0; #endif

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1