使用 memcpy 将 OpenCV mat 复制到已知地址

Copying OpenCV mat to a known address with memcpy

我是 C++ 的新手,我正在尝试创建一个使用 OpenCV 库的 DLL

我的 DLL 从其他应用程序获取原始图像并从应用程序的内存缓冲区创建 MAT。我将具有原始图像的缓冲区地址发送到 DLL 并将原始图像发送到 OpenCV。这部分有效。 但是用OpenCV处理图像后,我无法将原始图像写入相同的内存地址。

这是我试过的代码片段:

fn_export double createImage(char* address  double width, double height) {
  
  unsigned char* pBuffer = (unsigned char*)address;
  memcpy(&pBuffer,&address, sizeof(pBuffer));
  cv::Mat img = cv::Mat(height,width, CV_8UC4, pBuffer);
  cv::imshow("Original", img);

  memcpy(&address, &img.data[0], sizeof(address));

  return 1;
}

char* address 是我的应用程序的内存地址。其他应用程序的缓冲区不会以这种方式改变。有人对这种情况有什么建议吗?

好的。我解决了这个问题;

    Mat img = Mat(height, width, CV_8UC4, address);
cv::imshow("Image from GM", img);
// same image copy to buffer back;
memcpy(&address[0], &img.data[0], width*height*4.);