pvAPI没有使用prosilica ge和多个流构建整个图像

时间:2013-01-28 08:18:19

标签: opencv camera gige-sdk

我目前正在重新编程(编程)OpenCV的pvapi驱动程序,我无法实现流式传输多个摄像头。当我使用单个相机时,即使在最大分辨率下,一切都能正常工作,但是当我使用两个相机时,它甚至不能使用640x480分辨率(1600x1200是最大的,它在我的网络设置上工作正常,因此2次640x480'导致带宽问题。我在样本查看器中检查了它并且它可以正常工作。)

当我使用多台相机时,它只会更新图像的一小部分,并停止等待图像完成。

摄像机在图像中间设置为Bgr24和ROI为640x480,PacketSize设置为4096,其他所有设置均为默认设置。 它们通过千兆以太网交换机连接,该交换机也以千兆速度连接到PC。该程序只是查询图像并将它们放在屏幕上。我试过线程。它有助于两个流之间的延迟,但不能解决问题。

我做错了什么?

我使用此代码检索新框架:

int LastIndex = Index - 1;
if(LastIndex == -1) LastIndex = FRAMESCOUNT - 1;

while((Errcode = PvCaptureWaitForFrameDone(Camera.Handle,&(Camera.Frame[Index]), 2000)) != ePvErrSuccess)
    printf("\nCam[%ul]: Waiting for frame to return to host... %u\n", Camera.UID, Errcode);

// if frame hasn't been cancelled, requeue frame
if(Camera.Frame[Index].Status != ePvErrCancelled)
{
    //Check for gaps in FrameCount due to image returning from camera with no frame queued.
    //This should never happen, as we use a multiple frame circular buffer. 
    if(Last + 1 != Camera.Frame[Index].FrameCount)
    {
        printf("missing frame");
    }

    Last = Camera.Frame[Index].FrameCount;
    frame->imageData = (char*) Camera.Frame[Index].ImageBuffer;

    //Requeue [Index] frame of FRAMESCOUNT num frames
    if ((Errcode = PvCaptureQueueFrame(Camera.Handle,&(Camera.Frame[LastIndex]),NULL)) != ePvErrSuccess)
    {
        printf("Cam[%ul]: PvCaptureQueueFrame err %u\n", Camera.UID, Errcode);
    }

    //Increment [Index]
    Index++;
    if(Index==FRAMESCOUNT)
        Index = 0;   

    return true;
}
else
{
    return false;
}

0 个答案:

没有答案