我需要在FreeImage(FIBITMAP)和OpenCV格式(IplImage和/或Mat)之间交换数据。我很好地将数据从FIBITMAP获取到IplImage或Mat中,因为FreeImage为您提供了功能FreeImage_GetScanLine,您可以将OPenCV imageData ptr设置为等于。
但是,我坚持如何做相反的事情,即一旦有了OpenCV镜像,如何将其数据转换为FreeImage镜像?
最佳答案
您只需要稍微小心一点就复制数据指针,很多图像格式都有填充以在例如4字节边界上的每一行开始。
如果您的图像具有GetScanLine()函数,那么制作一个空的plImage * / cv::Mat并使用从GetScanLine()返回的指针和cv::MAt的.ptr()成员进行内存复制,可能更安全。
cv::Mat &src
int srcRowBytes = width * src.elemSize();
for (int ih=0;ih<height;ih++) {
memcpy(dest.pointer_to_row(ih),src.ptr(ih),srcRowBytes);
}
关于opencv - 将OpenCV IplImage或Mat复制到Freeimage FIBITMAP中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927049/