• 3397阅读
  • 0回复

[讨论]Qt+工业相机 segament fault问题 [复制链接]

上一主题 下一主题
离线jffx
 

只看楼主 倒序阅读 楼主  发表于: 2016-11-02
贴下部分主要代码,问题描述,第一个函数是抓取线程函数,当捕捉到图像时,触发第二个函数(事件函数),可通过 ptrGrabResult->GetBuffer()得到图像buffer,然后赋给image1,然后调用update显示视频,但是总是出现segament fault,如果去掉 显示语句painter.drawImage(QPoint(20,20), image1);就不会出错,相机帧率可以调节,个人感觉好像是qt刷新频率跟不上抓取,导致painter还没来得及画指针 ptrGrabResult->GetBuffer()指向的buffer时,buffer就又被改变了,不知道是不是这个问题,,我在pc上跑是不会有问题的,但在arm跑就会有问题,不知道是不是arm上painter画图速率跟不上,,请问大虾们有什么指教的么,如果是我想的那样该怎样解决,我已经把帧率调到30fps了,,
/*抓取线程*/

   while ( camera.IsGrabbing())
        {

            // Wait for an image and then retrieve it. A timeout of 5000 ms is used.
            camera.RetrieveResult( 5000, ptrGrabResult, TimeoutHandling_ThrowException);


        }

/*事件函数*/

void Widget::OnImageGrabbed(CInstantCamera& camera,const CGrabResultPtr& ptrGrabResult)
{


    // Image grabbed successfully?
    if (ptrGrabResult->GrabSucceeded())
    {
       image1=QImage((uint8_t *) ptrGrabResult->GetBuffer(), 656,494,QImage::Format_Indexed8);

    }
    else
    {
        cout << "Error: " << ptrGrabResult->GetErrorCode() << " " << ptrGrabResult->GetErrorDescription();
    }


}
/*显示函数*/


void Widget::paintEvent(QPaintEvent *)
{

      QPainter painter(this);
      image1.setColorTable(grayTable);
      painter.drawImage(QPoint(20,20), image1);



}
快速回复
限100 字节
 
上一个 下一个