Halcon视觉之家-Halcon视觉技术论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 3161|回复: 7

[资料] Halcon20.05导出visualize_object_model_3d无法刷新3d图像(一片黑)?

[复制链接]

签到天数: 36 天

连续签到: 5 天

[LV.5]常住居民I

444

主题

1864

帖子

8350

积分

Rank: 9

积分
8350

突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

发表于 2020-7-3 15:08:16 | 显示全部楼层 |阅读模式

51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

您需要 登录 才可以下载或查看,没有账号?会员注册

x
Halcon测试代码如下:
  1. dev_get_window (WindowHandle)
  2. read_object_model_3d ('bmc_mini', 'mm', [], [], ObjectModel3D, Status)
  3. visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], [], [], [], PoseOut)
复制代码

导出到C#中运行,始终不显示图像(Halcon12中是完全没有问题的)
微信截图_20200703150223.png
通过变量检测可以看到ho_ImageDump变量是有图的,但是就是显示不出来,在continue按钮出现的大概黑色附近点击,还是可以显示最后的图像(才刷新)。
所以,笔者认为这个地方可能出现了图像刷新的堵塞,所以我们尝试加入主程序主线程刷新消息看看。
添加下面代码:
  1. System.Windows.Forms.Application.DoEvents();
复制代码

在主程序visualize_object_model_3d函数里面找到并添加如下:
  1. dump_image_output(ho_Image, hv_WindowHandleBuffer, hv_Scene3D, hv_AlphaOrig,
  2.     hv_ObjectModel3D, hv_GenParamName_COPY_INP_TMP, hv_GenParamValue_COPY_INP_TMP,
  3.     hv_CamParam_COPY_INP_TMP, hv_Poses, hv_ColorImage, hv_Title, hv_Information,
  4.     hv_Label_COPY_INP_TMP, hv_VisualizeTB, "true", hv_TrackballCenterRow,
  5.     hv_TrackballCenterCol, hv_TBSize, hv_SelectedObject, hv_WindowCenteredRotation,
  6.     hv_TBCenter);
  7. ho_ImageDump.Dispose();
  8. HOperatorSet.DumpWindowImage(out ho_ImageDump, hv_WindowHandleBuffer);
  9. HDevWindowStack.SetActive(hv_WindowHandle);
  10. if (HDevWindowStack.IsOpen())
  11. {
  12.     HOperatorSet.DispObj(ho_ImageDump, hv_WindowHandle);
  13.     System.Windows.Forms.Application.DoEvents();
  14. }
复制代码

初步测试已经可以了,就是消息所在的位置导致可能会出现卡顿情况,尝试几个while地方都加上应该会好些。
微信截图_20200703150639.png
暂时先这样吧。
接下来,我们再继续研究看看高版本是否还有其他解决方式。
解决方法一:尝试导出Halcon后,初始化让halcon使用windows线程机制!
  1. set_system('use_window_thread','true')
复制代码

=================华丽的分割线==========================
后面重新用19.05测试了下,其实阻塞在主线程处理主线程消息也会导致卡顿,甚至可能导致无法响应鼠标消息。
最好的解决办法:让visualize_object_model_3d 算子运行在子线程中!
visualize_object_model_3d算子自带例子(修改了下窗口句柄是获取不是打开新的窗口):
  1. dev_get_window (WindowHandle)
  2. read_object_model_3d ('pipe_joint', 'm', [], [], ObjectModel3D1, Status)
  3. read_object_model_3d ('clamp_sloped', 'mm', [], [], ObjectModel3D2, Status)
  4. gen_cam_par_area_scan_division (0.016, 0, 5e-6, 5e-6, 320, 240, 640, 480, CamParam)
  5. get_cam_par_data (CamParam, 'image_width', Width)
  6. get_cam_par_data (CamParam, 'image_height', Height)
  7. create_pose (-0.02, 0.01, .6, 110, 5, 320, 'Rp+T', 'gba', 'point', Pose1)
  8. create_pose (0.01, 0.03, .6, 130, 315, 340, 'Rp+T', 'gba', 'point', Pose2)
  9. visualize_object_model_3d (WindowHandle, [ObjectModel3D1, ObjectModel3D2], \
  10.                            CamParam, [Pose1, Pose2], \
  11.                            ['alpha', 'color_0', 'color_1', 'disp_pose'], \
  12.                            [0.5,     'orange',  'yellow',  'true'], \
  13.                            ['3D visualization demo'], ['pipe joint', 'clamp'], \
  14.                            ['Use mouse to change view'], PoseOut)
复制代码

导出为C#函数,然后新建winform工程并在界面添加HWindowControl控件,并在Form1添加代码:
  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             HDevWindowStack.Push(this.hWindowControl1.HalconWindow);
  4.             HDevWindowStack.SetActive(this.hWindowControl1.HalconWindow);
  5.             Thread th = new Thread(HalconProc);
  6.             th.IsBackground = true;
  7.             th.Start();
  8.         }
  9.         
  10.         private void HalconProc()
  11.         {
  12.             HDevelopExport hal = new HDevelopExport();
  13.         }
复制代码

记得顶部引用命名空间:using HalconDotNet;
编译测试,功能完全正常!
微信截图_20210416195327.jpg

如果鼠标不在图像控件区域内则会引发异常,这是正常的:
  1. 引发的异常:“HalconDotNet.HOperatorException”(位于 halcondotnet.dll 中)
复制代码


测试代码:
WindowsFormsApplication1.rar (42.39 KB, 下载次数: 64)
无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系

签到天数: 29 天

连续签到: 3 天

[LV.4]偶尔看看III

0

主题

141

帖子

937

积分

Rank: 3

积分
937

切换助手验证会员

发表于 2020-7-4 17:28:37 | 显示全部楼层
大佬牛逼,,,,,

该用户从未签到

1

主题

11

帖子

29

积分

Rank: 1

积分
29
发表于 2020-9-8 09:32:00 | 显示全部楼层
halcon3d读取并显示,c#代码

该用户从未签到

0

主题

60

帖子

90

积分

Rank: 1

积分
90

切换助手验证会员

发表于 2021-1-24 19:47:48 | 显示全部楼层
大神威武

该用户从未签到

0

主题

20

帖子

28

积分

Rank: 1

积分
28
发表于 2021-4-15 20:28:55 | 显示全部楼层
niu  niu niu

该用户从未签到

0

主题

3

帖子

18

积分

Rank: 1

积分
18
发表于 2021-6-29 11:17:39 | 显示全部楼层
太厲害了 馬上來試試看 感謝

该用户从未签到

4

主题

64

帖子

204

积分

Rank: 2Rank: 2

积分
204
发表于 2022-1-11 14:36:04 | 显示全部楼层
用到.net 4.0 要运用halcon高版本,17还不行!

该用户从未签到

4

主题

64

帖子

204

积分

Rank: 2Rank: 2

积分
204
发表于 2022-1-11 14:55:54 | 显示全部楼层
好多报错 htuple dispose, 要用HALCON 18以上版本!
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

视觉培训招生

建议您使用Chrome、Firefox、Edge、360、IE10以上等主流浏览器浏览本论坛

算子查询| 申请友链| 小黑屋| 手机版| Archiver| 业务支持|

© 2015-2021 Halcon视觉之家  X3.4  粤ICP备15095995号 粤公网安备44030602000670号

本站已安全运行:

快速回复 返回顶部 返回列表