我在将图像数据从图像采集卡解析为 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();