我在将图像采集卡中的图像数据解析为 OpenCV Mat 格式时遇到问题。我可以从 EDT 图像采集卡获取图像数据作为无符号字符指针,并将其传递给新创建的 Mat,但我在此过程中丢失了有价值的数据,并且不确定如何修复它。
我的相机是红外相机,输出 12 位 320x256 拜耳图像。我相当有信心我对 EDT API 的使用是正确的。使用 EDT 的软件“pdvshow”,我可以按预期查看图像数据,但是当我将 EDT API 返回的帧转换为 OpenCV Mat 并显示它时,我丢失了大量数据。当我将 Mat 设置为 CV16UC1 时,帧接近黑色,当 Mat 设置为 CV8UC1 时,帧显示大部分数据,但显得非常颗粒化,并且一些点完全被吹掉。我知道图像采集卡将每个 12 位像素存储在两个字节中,并且数据是 MSB 对齐的。GetStride 返回 0。
unsigned char *pdvImage;
pdvImage = pdv_image(pdv_p);
cv::Mat freshFrame;
freshFrame = cv::Mat(GetHeight(), GetWidth(), CV_16UC1, pdvImage, GetStride()); //was CV_16UC1 but 8UC1 shows more data
return freshFrame.clone();
Run Code Online (Sandbox Code Playgroud)