【发布时间】:2020-07-25 21:28:45
【问题描述】:
我是 C++ 的新手,我正在尝试创建一个使用 OpenCV 库的DLL。
我的DLL 从其他应用程序获取原始图像并从应用程序的内存缓冲区创建MAT。我将包含原始图像的缓冲区地址发送到DLL,并将原始图像发送到 OpenCV。这部分有效。
但是使用 OpenCV 处理图像后,我无法将原始图像写入相同的内存地址。
这是我尝试过的代码 sn-p:
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 是我的应用程序的内存地址。其他应用程序的缓冲区不会以这种方式改变。有人对这种情况有什么建议吗?
【问题讨论】:
-
在 memcpy() 中,当您获取 sizeof(address) 时,这是不正确的,因为这只是复制指针而不是指针指向的位置的实际数据。 &address[0] 和 &address 也是一回事。
-
感谢您的评论。是的你是对的。我意识到我的代码中的一些定义是不必要的。