Я думаю, что вижу две проблемы, обе в одном и том же вызове функции:
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)
, поскольку ваши элементы являются числами с плавающей точкой.