gpt4 book ai didi

opencv - 将 Basler 图像转换为 OpenCV

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:58 24 4
gpt4 key购买 nike

我正在尝试将从 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 格式。

最佳答案

您正在创建 cv 图像以使用相机的内存 - 而不是拥有自己内存的图像。问题可能是相机正在锁定该指针 - 或者可能希望在每个新图像上重新分配和移动它

尝试创建不带最后一个参数的图像,然后使用 memcpy() 将像素数据从相机复制到图像。

// Danger! Result.Buffer() may be changed by the Basler driver without your knowing          
const uint8_t *pImageBuffer = (uint8_t *) Result.Buffer();

// This is using memory that you have no control over - inside the Result object
img = cv::Mat(964, 1294, CV_8UC1, &pImageBuffer);

// Instead do this
img = cv::Mat(964, 1294, CV_8UC1); // manages it's own memory

// copies from Result.Buffer into img
memcpy(img.ptr(),Result.Buffer(),1294*964);

// edit: cvImage stores it's rows aligned on a 4byte boundary
// so if the source data isn't aligned you will have to do
for (int irow=0;irow<964;irow++) {
memcpy(img.ptr(irow),Result.Buffer()+(irow*1294),1294);
}

关于opencv - 将 Basler 图像转换为 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com