我试图将从Basler相机捕获的帧转换为OpenCV的Mat格式。没有很多的来自巴斯勒API文档的信息,但这些都是在巴斯勒例子中,两行应在确定什么是有用的输出格式为:将Basler图像转换为OpenCV
// 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());
两者都不起作用。任何建议/意见将不胜感激,谢谢!
编辑:我可以通过访问像素巴斯勒图像:
for (int i=0; i<1294*964; i++)
(uint8_t) pImageBuffer[i];
如果它转换为OpenCV中的垫格式帮助。
你是什么意思,它不起作用?它是否会崩溃,或者您是否获得了图案图像(即,您关闭了几行或几列甚至是几个通道)?你可以发布输出吗?它看起来像使用1294x964的全帧参数。这些真正有效的行是由Basler返回的,还是它们是前/后有效的行,它是1280x960?相机是提供分色输出还是单色? – mevatron
嗨,代码编译和运行,但如果我尝试使用'cv :: imshow()'显示图像,我得到一个错误窗口弹出说“basler_camera.exe已停止工作”。 1294 * 964是相机的最高分辨率,因此是正确的。我相信问题是从'pImageBuffer'复制到'img',但不知道如何正确执行。 –