copyTo
函数介绍
copyTo
函数是OpenCV库中的一个成员函数,用于将一个Mat对象的内容复制到另一个Mat对象中。
函数原型:
void cv::Mat::copyTo(OutputArray m) const;
void cv::Mat::copyTo(OutputArray m, InputArray mask) const;
参数说明:
- m: 输出数组,即目标Mat对象,用于存储源Mat对象的内容。
- mask: 图像掩膜,用选定的图像作为遮挡,来控制图像处理的区域;
使用案例
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取一张图片
Mat src = imread("D:/LocalTest/images/beauty_01.jpg");
if (src.empty())
{
cout << "无法读取图片" << endl;
return -1;
}
// 创建一个新的Mat对象,大小为src的2倍,并用黑色来填充,用于存储复制后的内容
// 这里需要注意的是,opencv中Mat对象第一个参数为rows,也就是高,第二个参数是cols,也就是宽,和我们平时说的宽x高相反
Mat dst = Mat(src.rows, src.cols * 2 , src.type(), Scalar(0, 0, 0));
// 将src的内容复制到dst制定的区域,相当于对src进行了水平复制
// 这里使用了dst(roi)的方式进行拷贝
// roi的定义调用了Mat类的赋值运算符,Mat类中的拷贝构造函数和赋值运算符定义的新Mat对象,都属于浅拷贝,即只为新构造的对象创建新的矩阵头,并将矩阵指针指向对其进行赋值或拷贝的Mat对象像素值存储的位置。也就是说,这种形式新定义的Mat对象,它的像素值和旧Mat对象的像素值,其实是一个矩阵的值,所以对新对象的像素值进行修改,旧的对象的像素值也会变化。
src.copyTo(dst(Rect(0, 0, src.cols, src.rows)));
// 使用mask来控制只复制比较亮的部分
src.copyTo(dst(Rect(src.cols, 0 , src.cols, src.rows)), src > 128 );
// 显示原始图片和复制后的图片
imshow("原始图片", src);
imshow("复制后的图片", dst);
// 等待按键,关闭窗口
waitKey(0);
destroyAllWindows();
return 0;
}
在这个例子中,我们首先读取了一张名为"beauty_01.jpg"的图片,并将其内容存储在名为src
的Mat对象中。然后,我们创建了一个新的Mat对象dst,
并使用copyTo
函数将src
的内容复制到dst
中。最后,我们分别显示了原始图片和复制后的图片。