【发布时间】:2011-12-05 18:36:40
【问题描述】:
我正在尝试将从 Basler 相机捕获的帧转换为 OpenCV 的 Mat 格式。 Basler API 文档中的信息并不多,但 Basler 示例中的这两行应该有助于确定输出的格式:
// Get the pointer to the image buffer
const uint8_t *pImageBuffer = (uint8_t *) Result.Buffer();
cout << "Gray value of first pixel: " << (uint32_t) pImageBuffer[0] << endl << endl;
我知道图像格式是什么(目前设置为单声道 8 位),并尝试过这样做:
img = cv::Mat(964, 1294, CV_8UC1, &pImageBuffer);
img = cv::Mat(964, 1294, CV_8UC1, Result.Buffer());
这两种方法都不起作用。任何建议/建议将不胜感激,谢谢!
编辑:我可以通过以下方式访问 Basler 图像中的像素:
for (int i=0; i<1294*964; i++)
(uint8_t) pImageBuffer[i];
如果这有助于将其转换为 OpenCV 的 Mat 格式。
【问题讨论】:
-
它不起作用是什么意思?它会崩溃,还是你得到一个有图案的图像(即,你离开了几行或几列,甚至可能是通道)?如果有的话,你可以发布输出吗?看起来您使用的是 1294x964 的全帧参数。 Basler 是否返回了那些真正有效的行,或者它们是有效行前/后有效行并且是 1280x960?相机是提供拜耳输出还是单色?
-
您好,代码编译并运行,但如果我尝试使用
cv::imshow()显示图像,我会弹出一个错误窗口,提示“basler_camera.exe 已停止工作”。 1294*964 是相机的最大分辨率,所以这是正确的。我相信问题出在从pImageBuffer复制到img,但无法弄清楚如何正确执行。
标签: opencv