700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 《opencv学习笔记》-- 感兴趣区域(ROI) 图像混合

《opencv学习笔记》-- 感兴趣区域(ROI) 图像混合

时间:2020-10-17 06:44:01

相关推荐

《opencv学习笔记》-- 感兴趣区域(ROI) 图像混合

目录

感兴趣区域(ROI)

图像混合

感兴趣区域(ROI)

在图像中选择一个区域。

定义ROI区域的方法有两种形式:

方法一:

使用Rect,指定左上角坐标以及矩形的长宽

Mat roi = image(Rect(100, 100, 250, 250));

image是已经载入的图像。

方法二:

指定感兴趣区域的行和列的范围

Mat roi = image(Range(20, 150), Range(30, 300));

Range:指从其实索引到终止索引的连续序列

显示效果:

代码:

#include <iostream>#include "opencv2/opencv.hpp"using namespace cv;int main(){cv::Mat image = imread("E:\\roi_test.png");cv::imshow("源图", image);cv::Mat roi = image(Range(30, 280), Range(60, 300));cv::imshow("roi", roi);cv::waitKey(0);return 0;}

图像混合

先指定ROI,在用addweighted对指定的ROI区域的图像进行混合的操作。

线性混合操作是一种典型的二元的像素操作,理论公式为:

g(x) = (1 - a)F1(x) + aF2(x)

a代表alpha的值(0.0~1.0),对两幅图像(F1(x)和F2(x))或两段视频(F1(x)和F2(x))产生时间上的画面叠化效果,前面页面切换至后面页面的一种叠加效果。

实现方式:addWeighted函数:计算两个数组(图像阵列)的加权和

void addWeighted(InputArray src1, double alpha,InputArray src2,double beta, double gamma, OutputArray dst, int dtype = -1);

参数1,InputArray类型的src1,表示需要加权的第一个数组;

参数2,double类型的alpha,表示src1的权重;

参数3,InputArray类型的src2,表示第二个数组,它需要和src1拥有相同的尺寸和通道数;

参数4,double类型的beta,表示src2的权重值;

参数5,double类型的gamma,一个加到权重总和上的标量值。

参数6,OutputArray类型的 dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道 数;

参数7,int类型的dtype,输出阵列的可选深度,有默认值-1。当两个输入数组具有相同的深 度时,这个参数设置为-1(默认值),即等同于src1.depth()。

两个数组 (src1和src2) 的加权和: 对 addWeighted 参数中 beta 位为1-alpha

gamma 位为0

dst = src1[i]*alpha+src2[ i]*beta+gamma;

i:多维数组元素的索引值,再多通道数组的情况下,每一个通道需要独立处理。当输入数组的深度为CV_32S时,此函数不适用。

显示效果:

代码:

Mat srcImg1;Mat srcImg2;Mat srcImg3;srcImg1 = imread("E:\\img\\logo3.png");srcImg2 = imread("E:\\img\\logo4.png");imshow("源图srcImg1", srcImg1);imshow("源图srcImg2", srcImg2);addWeighted(srcImg1, 0.5, srcImg2, 0.5, 0.0, srcImg3);imshow("混合的srcImg3", srcImg3);

也可以指定roi之后,再将图片中的某个区域进行混合。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。