我想我看到两个问题,都在同一个函数调用中:
Imf::FrameBuffer frameBuffer;
frameBuffer.insert ("Z", // name
Imf::Slice (Imf::FLOAT, // type
(char *) (inputImage.data - dw.min.x - dw.min.y * width), // base pointer
sizeof(CV_32F)*1, // xStride
sizeof(CV_32F) * width, // yStride
1, 1, // x/y sampling
0.0)); // fillValue
首先,opencv mat的大小与openexr图像的宽度和高度完全相同,这意味着如果将它放在mat缓冲区最开始的位置以外的任何其他位置,就会出现问题。所以,改变这一行:
(char *) (inputImage.data - dw.min.x - dw.min.y * width), // base pointer
到
(char *) (inputImage.data), // base pointer
第二,你使用
sizeof(CV_32F)
. 但问题是,
CV_32F
不是类型,而是类型枚举中的元素,因此我认为您应该更喜欢
sizeof(float)
因为你的元素是浮动的。