我目前正在使用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).
前者是唯一一个成功编译的人,并且显示出胡言乱语 - 我的意思是,它不会形成图像。
答案 0 :(得分:0)
您是否尝试切换row
的{{1}}和col
?
您使用Mat
= 2592,row
= 2048,
初始化了您的Mat
但是您在col
循环中使用了切换row
和col
。
我认为此代码应该正常运行:
for()
或者,如果您使用的是C ++ 11,
Mat image(2048, 2592, CV_8UC1, &frameBuffer[0]);