Halcon与QT混合编程 C++ QT中 DrawRegion和ReduceObjectModel3dByView函数与分离后不能准确分割区域的问题

Halcon与QT混合编程

在C++中,我们首先用visualize_object_model_3d函数显示3D模型。并且把continue按钮去掉。

然后点击QT上的button,之后执行DrawRegion和ReduceObjectModel3dByView函数,选择3D模型中的部分区域。

但是这样造成了一个问题:

去掉continue按钮后,visualize_object_model_3d函数不能正常退出,因此我们无法使用它的返回值。hv_PoseOut便成了无效参数。

DrawRegion(&ho_UserRegion, hv_WindowHandle);

ReduceObjectModel3dByView(ho_UserRegion, hv_TeachObjectModel3DSelected, hv_CamParam,
        hv_PoseOut, &hv_TeachObjectModel3DSelected);

因此,ReduceObjectModel3dByView函数就不能把3D模型中正确的区域提取出来。

因此,我们需要修改visualize_object_model_3d函数的源码,使其在不能正常退出的时候,也可以返回当前姿态。

因此便需要实时的返回当前姿态。

我们在visualize_object_model_3d函数中找到返回姿态的代码:

    //Compute the output pose
    if (0 != ExpGetGlobalVar_gIsSinglePose())
    {
      (*hv_PoseOut) = hv_Poses.TupleSelectRange(0,6);
    }
    else
    {
      (*hv_PoseOut) = hv_Poses;
    }

可以看到,姿态的返回是用指针的,因此可以很方便的让它实时返回。只需要把这段代码放到显示函数的循环中即可。

放到哪里呢?

我尝试了好多次,终于找到了

      dump_image_output(ho_Image, hv_WindowHandleBuffer, hv_Scene3D, hv_AlphaOrig, 
          hv_ObjectModel3D, hv_GenParamName, hv_GenParamValue, hv_CamParam, hv_Poses, 
          hv_ColorImage, hv_Title, hv_Information, hv_Label, hv_VisualizeTB, "true", 
          hv_TrackballCenterRow, hv_TrackballCenterCol, hv_TBSize, hv_SelectedObject, 
          hv_WindowCenteredRotation, hv_TBCenter);
      DumpWindowImage(&ho_ImageDump, hv_WindowHandleBuffer);
      HDevWindowStack::SetActive(hv_WindowHandle);
      if (HDevWindowStack::IsOpen())
        DispObj(ho_ImageDump, HDevWindowStack::GetActive());
      //
      //Check for mouse events
      hv_GraphEvent = 0;
      hv_Exit = 0;
	  
	  //todo
      while (0 != 1)
      {
		  if (0 != ExpGetGlobalVar_gIsSinglePose())
		  {
			  (*hv_PoseOut) = hv_Poses.TupleSelectRange(0, 6);
		  }
		  else
		  {
			  (*hv_PoseOut) = hv_Poses;
		  }

		  QCoreApplication::processEvents();
        //
        //Check graphic event
        try
        {
          GetMpositionSubPix(hv_WindowHandle, &hv_GraphButtonRow, &hv_GraphButtonColumn, 
              &hv_GraphButton);

我把它放到了这里(注意是复制到这里)

具体在第二层while (0 != 1)循环内的开始处。

 

然后即使切断visualize_object_model_3d函数,我们也能取得当前的姿态了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值