在opencv中复制Mat

新手上路,请多包涵

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

在此处输入图像描述

这是我使用的代码:

 #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);
}

原文由 Robotic Vn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

只需使用 .clone() cv::Mat 功能:

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

这会成功的。您正在使用 CV_8UC1 制作仅具有一个通道的图像(这意味着只有灰色阴影是可能的),您可以使用 CV_8UC3CV_8UC4 但只是用于复制坚持使用克隆功能。

原文由 David Safrastyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是一个复制图像的简单代码。

  #include <opencv2/opencv.hpp>
 #include <opencv2/highgui/highgui.hpp>
 #include <opencv2/imgproc/imgproc.hpp>
 #include <cmath>
 int main()
 {
    cv::Mat inImg = cv::imread("1.jpg");

    cv::Mat outImg = inImg.clone();

   cv::namedWindow("Test");
   imshow("Test", inImg);

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

   cvWaitKey(0);
}

原文由 Sagar Patel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题