c++ - 在opencv中复制Mat

标签 c++ opencv mat

我尝试使用 opencv 将图像复制到其他图像,但我遇到了问题。两张图片不一样,像这样:

enter image description here

这是我使用的代码:

#include <opencv2\opencv.hpp>

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <cmath>
#include <iostream>
#include <opencv2\opencv.hpp>
int main()
{
    cv::Mat inImg =    cv::imread("C:\\Users\\DUY\\Desktop\\basic_shapes.png");  
    //Data point copy  
    unsigned char * pData = inImg.data;  

    int width = inImg.rows;  
    int height = inImg.cols;  

    cv::Mat outImg(width, height, CV_8UC1);  
    //data copy using memcpy function  
    memcpy(outImg.data, pData, sizeof(unsigned char)*width*height);  

   //processing and copy check  
   cv::namedWindow("Test");  
   imshow("Test", inImg);  

   cv::namedWindow("Test2");  
   imshow("Test2", outImg);  

   cvWaitKey(0);  
}

最佳答案

简单地使用cv::Mat.clone()函数:

cv::Mat source = cv::imread("basic_shapes.png");
cv::Mat dst = source.clone();

这样就可以了。 您正在使用 CV_8UC1 制作只有一个 channel 的图像(这意味着只有灰色阴影是可能的),您可以使用 CV_8UC3CV_8UC4 但是只需使用克隆功能进行复制即可。

关于c++ - 在opencv中复制Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31458566/

相关文章:

python - 如何在 OpenCV 中将边缘转换为轮廓

opencv - 如何在 Windows 上安装 NAWK?

c++ - Mat::push_back(x) 是否复制 x 个元素?

c++ - 以下代码如何工作?

c++ - 如何在 Windows 上报告堆栈缓冲区溢出?

c++ - Fork off more processes as previous finish,直到达到最大值

c++ - 子类/父类(super class)的“没有匹配的函数调用”

c++ - OpenGL 纹理的 OpenCV 图像加载

c++ - 如何访问存储在 Mat C++ 中的 findNonZero 坐标

c++ - opencv mat扫描随机时间窃取