ROI

cv:Rect

指定矩形的左上角坐标(构造函数的前两个参数)和矩形的长宽(构造函数的后两个参数)就可以定义一个矩形区域。

//定义一个Mat类型并给其设定ROI区域
Mat imageROI;
//方法一
imageROI=image(Rect(500,250,logo.cols,logo.rows));

cv::Range

Range是指从起始索引到终止索引(不包括终止索引)的一连段连续序列。

//方法二
imageROI=srcImage3(Range(250,250+logoImage.rows),Range(500,500+logoImage.cols));

拷贝

深拷贝

操作系统为B开辟了新的内存空间,所以A改变不会导致B改变。

Mat A,B;
A = imread("1.jpg");
B = A.clone();
//A.copyTo(B);

copyTo()以及掩膜的用法:

https://www.cnblogs.com/phoenixdsg/p/8420716.html

https://www.cnblogs.com/skyfsm/p/6894685.html

浅拷贝

B只拷贝了A的地址,所以A改变的话会导致B改变。

Mat A,B;
A = imread("1.jpg");
B = A;

初级图像混合——线性混合操作

addWeighted函数

这个函数的作用是,计算两个数组(图像阵列)的加权和。

void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
  • 第一个参数,表示需要加权的第一个数组,常常填一个Mat。
  • 第二个参数,表示第一个数组的权重。
  • 第三个参数,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。
  • 第四个参数,表示第二个数组的权重值。
  • 第五个参数,一个加到权重总和上的标量值。
  • 第六个参数,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
  • 第七个参数,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。

其中的I是多维数组元素的索引值。而且,在遇到多通道数组的时候,每个通道都需要独立地进行处理。另外需要注意的是,当输出数组的深度为CV_32S时,这个函数就不适用了,这时候就会内存溢出或者算出的结果压根不对。

图像深度是指存储每个像素所用的位数,也用于量度图像的色彩分辨率.图像深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级.比如一幅单色图像,若每个象素有8位,则最大灰度数目为2的8次方,即256.一幅彩色图像RGB3个分量的象素位数分别为4,4,2,则最大颜色数目为2的4+4+2次方,即1024,就是说像素的深度为10位,每个像素可以是1024种颜色中的一种.