如何将图像缓冲区传递给 OpenCV Mat 对象?
How to pass an image buffer to an OpenCV Mat object?
我目前正在使用 PixeLINK USB3 机器视觉相机和 C 中的 OpenCV 进行编程。我使用以下代码成功地传递了 Mat 格式的相机图像:
PXL_RETURN_CODE rc = PxLInitialize(0, &hCamera);
if (!API_SUCCESS(rc))
{
printf("Error: Unable to initialize a camera. \n");
return EXIT_FAILURE;
}
vector<U8> frameBuffer(3000 * 3000 * 2);
FRAME_DESC frameDesc;
if (API_SUCCESS(PxLSetStreamState(hCamera, START_STREAM)))
{
while (true)
{
frameDesc.uSize = sizeof(frameDesc);
rc = GetNextFrame(hCamera, (U32)frameBuffer.size(), &frameBuffer[0],
&frameDesc, 5);
Mat image(2592, 2048, CV_8UC1);
Mat imageCopy;
// Where passing of image data occurs
int k = 0;
for (int row = 0; row < 2048; row++)
{
for (int col = 0; col < 2592; col++)
{
image.at<uchar>(row, col) = frameBuffer[k];
k++;
}
}...
正如我所提到的,这可行,但看起来很草率。我在网上看过,但没有找到太多细节。
我试过:
Mat image(2592, 2048, CV_8UC1, &frameBuffer, size_t step=AUTO_STEP);
还有,
Mat image(2592, 2048, CV_8UC1, frameBuffer, size_t step=AUTO_STEP).
前者是唯一编译成功的,并且显示乱码 - 我的意思是,它没有形成图像。
您是否尝试过切换 Mat
的 row
和 col
?
你用 row
= 2592, col
= 2048,
初始化了你的 Mat
但是您在 for()
循环中使用了切换的 row
和 col
。
我认为这段代码应该可以正常工作:
Mat image(2048, 2592, CV_8UC1, &frameBuffer[0]);
或者,如果您使用的是 C++11,
Mat image(2048, 2592, CV_8UC1, frameBuffer.data());
我目前正在使用 PixeLINK USB3 机器视觉相机和 C 中的 OpenCV 进行编程。我使用以下代码成功地传递了 Mat 格式的相机图像:
PXL_RETURN_CODE rc = PxLInitialize(0, &hCamera);
if (!API_SUCCESS(rc))
{
printf("Error: Unable to initialize a camera. \n");
return EXIT_FAILURE;
}
vector<U8> frameBuffer(3000 * 3000 * 2);
FRAME_DESC frameDesc;
if (API_SUCCESS(PxLSetStreamState(hCamera, START_STREAM)))
{
while (true)
{
frameDesc.uSize = sizeof(frameDesc);
rc = GetNextFrame(hCamera, (U32)frameBuffer.size(), &frameBuffer[0],
&frameDesc, 5);
Mat image(2592, 2048, CV_8UC1);
Mat imageCopy;
// Where passing of image data occurs
int k = 0;
for (int row = 0; row < 2048; row++)
{
for (int col = 0; col < 2592; col++)
{
image.at<uchar>(row, col) = frameBuffer[k];
k++;
}
}...
正如我所提到的,这可行,但看起来很草率。我在网上看过,但没有找到太多细节。
我试过:
Mat image(2592, 2048, CV_8UC1, &frameBuffer, size_t step=AUTO_STEP);
还有,
Mat image(2592, 2048, CV_8UC1, frameBuffer, size_t step=AUTO_STEP).
前者是唯一编译成功的,并且显示乱码 - 我的意思是,它没有形成图像。
您是否尝试过切换 Mat
的 row
和 col
?
你用 row
= 2592, col
= 2048,
初始化了你的 Mat
但是您在 for()
循环中使用了切换的 row
和 col
。
我认为这段代码应该可以正常工作:
Mat image(2048, 2592, CV_8UC1, &frameBuffer[0]);
或者,如果您使用的是 C++11,
Mat image(2048, 2592, CV_8UC1, frameBuffer.data());