[C++] opencv - copyTo函数介绍和使用案例

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 
#include 

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中。最后,我们分别显示了原始图片和复制后的图片。

[C++] opencv - copyTo函数介绍和使用案例_第1张图片

你可能感兴趣的:(opencv,C++,opencv,c++)