使用 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.);
我是 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.);