C#/halcon联合编程 三维点云数据可视化(ActiViz实现)

这篇具有很好参考价值的文章主要介绍了C#/halcon联合编程 三维点云数据可视化(ActiViz实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言(已有方案的问题)

由于甲方需要,最近开始做的一个项目的框架旋转的是C#/halcon联合编程进行的,主要设计一些三维ocr、三维缺陷检测等等。之前类似的项目框架选的是C++/Qt/PCL/vtk,突然这么一变,还是有些不适应,在第一步点云可视化就被难倒了。
在超人视觉的罗超老师的视频中找到了一种解决方案,主要思路是:
1.将halcon的算子visualize_object_model_3d导成C#代码。
2.在winform组件里拖入一个PictureBox。
3.在C#代码里将hv_ObjectModel3D点云句柄(可由要从其他数据格式想halcon的数据格式转换)代入到visualize_object_model_3d算子得到halcon_window的窗口句柄。
4.定义halcon_window窗口的位置与PictureBox一致。完成。
这样做的问题在于HDevelop的窗口显示并不美观,交互做的确实不好,用起来不爽。另外很要命的一点是,halcon_window是阻塞式的,就是代码停在这一步才能进行交互,按右下角的continue按程序往下走之后就不能了。

不过对这个方案有兴趣的同学可以私信,我这里有相应的教程。

解决方案介绍

这里隆重推荐一款可视化库ActiViz(C#版VTK),三维计算机图形学、图像处理和可视化的开源库。安装简单,功能强大,可以说是非常优秀了。下面我详细介绍一下其安装和使用方案。

安装与环境配置

VS、Halcon等的安装这里就不赘述了,网上一大堆文章。这里以VS2017为例子进行ActiViz的安装介绍。
首先新建一个C#的windows窗体应用项目。然后配置上halcon环境(引用和工具箱里分别里面添加halcondotnet.dll即可)

点击 工具-NuGut包管理器-解决方案的NuGut程序包
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)
在NuGut解决方案中选择浏览想,输入ActiViz搜索,得到很多版本的ActiViz,选择最新版本且适合自己电脑位数的版本,勾选项目,然后点击右边的安装:
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)

到这里其实已经安装完成了。可以运行一下是否可以通过,如果出现报错,很有可能是版本位数不匹配的问题(尤其是安装64位ActiViz很有可能出现这个情况)。解决方案是右键启动项,选择属性:
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)
在生产里务必将 首选 32 位 取消勾选。
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)
再运行下,应该是没有问题了。
不过这个时候可能会遇到一个比较蛋疼想问题(有的人可能没遇到)。就是在工具栏里拖入RenderWindowCintrol的时候报错,然后组件就没有了。
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)
不过这个并不会影响使用。可以在代码里定义RenderWindowCintrol的对象。

实现一个demo

拖入一个Panel空间,在Form中调整好它的大小(一会的窗口就是附着在其上的)。
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)
然后在Form类下定义RenderWindowControl空间

private RenderWindowControl renderwindowcontrol1;

然后在Form1_Load函数(或者直接在Form1的构造函数中)开辟renderwindowcontrol1的内存空间,将其与panel1结合。

private void Form1_Load(object sender, EventArgs e)
        {
            renderwindowcontrol1 = new RenderWindowControl();
            renderwindowcontrol1.Dock = System.Windows.Forms.DockStyle.Fill;
            renderwindowcontrol1.Location = new System.Drawing.Point(0, 0);
            renderwindowcontrol1.Name = "renderwindowControl1";
            renderwindowcontrol1.Size = new System.Drawing.Size(100, 100);
            renderwindowcontrol1.TabIndex = 0;
            renderwindowcontrol1.TestText = null;
            //renderwindowcontrol1.BackColor = System.Drawing.Color.FromName("MediumSeaGreen");
            // 将控件添加进Pane1
            panel1.Controls.Add(renderwindowcontrol1);

            renderWindow = renderwindowcontrol1.RenderWindow;
            renderer = renderWindow.GetRenderers().GetFirstRenderer();
            renderer.SetBackground(0.2, 0.3, 0.4);
        }

运行可看到一个蓝色窗口(因为将背景颜色设置为(0.2,0.3,0.4)了)。
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)

找个点云,可视化它!

为了配合halcon,在这里的实现我选择了om3格式的点云数据,需要的同学可以私信,我这找到的是罗超老师分享的一个文件。
主要思想是,利用halcon的ReadObjectModel3d算子来读取点云至hv_ObjectModel3D句柄中。然后自定义h2v_cloud()函数实现hv_ObjectModel3D数据类型向vtkPoints的转换。进而将vtkPoints points传入
自定义的show_cloud()实现点云显示。

主要的代码如下,可以根据自己的需要稍作修改。

 private void button1_Click(object sender, EventArgs e)
        {
            hv_ObjectModel3D = new HTuple();
            hv_Status = new HTuple();

            HTuple hv_x = new HTuple(); HTuple hv_y = new HTuple(); HTuple hv_z = new HTuple();
            HTuple hv_num = new HTuple();
            //加载点云
            HOperatorSet.ReadObjectModel3d("D:/2023工作/基于机器视觉的轮胎表面缺陷检测/轮胎模型/2020-01-10-235331.om3",
          "mm", new HTuple(), new HTuple(), out hv_ObjectModel3D, out hv_Status);


            vtkPoints points = h2v_cloud(hv_ObjectModel3D);
            show_cloud(points, 1.0, 0, 0, 2);

        }
static vtkPoints h2v_cloud(HTuple hv_ObjectModel3D)
        {
            HTuple hv_x = new HTuple();
            HTuple hv_y = new HTuple();
            HTuple hv_z = new HTuple();
            HTuple hv_num = new HTuple();

            HOperatorSet.GetObjectModel3dParams(hv_ObjectModel3D, "point_coord_x", out hv_x);
            HOperatorSet.GetObjectModel3dParams(hv_ObjectModel3D, "point_coord_y", out hv_y);
            HOperatorSet.GetObjectModel3dParams(hv_ObjectModel3D, "point_coord_z", out hv_z);
            HOperatorSet.GetObjectModel3dParams(hv_ObjectModel3D, "num_points", out hv_num);

            int num = hv_num[0].I;
            vtkPoints points = new vtkPoints();

            for (int i = 1; i < num; i++)
            {
                points.InsertPoint(i, hv_x.DArr[i], hv_y.DArr[i], hv_z.DArr[i]);
            }

            return points;
        }
public void show_cloud(vtkPoints points, double r = 1.0, double g = 1.0, double b = 1.0, float size = 4f)
        {
            m_points = null;
            m_points = points;

            vtkPolyData polydata = vtkPolyData.New();
            polydata.SetPoints(points);
            vtkVertexGlyphFilter glyphFilter = vtkVertexGlyphFilter.New();
            glyphFilter.SetInputConnection(polydata.GetProducerPort());

            vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
            mapper.SetInputConnection(glyphFilter.GetOutputPort());
            vtkActor actor = vtkActor.New();
            actor.SetMapper(mapper);
            actor.GetProperty().SetPointSize(size);
            actor.GetProperty().SetColor(r, g, b);

            renderer.AddActor(actor);
        }

结果展示

这是我这两天做的一个demo,深度渲染等方法的代码暂时先不贴上来了哈。
C#/halcon联合编程 三维点云数据可视化(ActiViz实现)
可以看出效果还是不错的,比较美观。键盘、鼠标事件的交互也很流畅。基本上满足我的需求,目前来看与C++/Qt/PCL/vtk框架相比也是八九不离十了。之后有空会持续更新相关文章的。
更多问题可私信,非常渴望在halcon3d的探索道路上多几个朋友!文章来源地址https://www.toymoban.com/news/detail-435503.html

到了这里,关于C#/halcon联合编程 三维点云数据可视化(ActiViz实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cesium教程(十六):动态数据三维可视化

    Cesium时间系统在动态数据可视化中发挥着重要作用。 CZML是Cesium团队制定的一种用来描述动态场景的JSON架构语言。可以描述点、线、多边形、体及其他图元。 实现效果::模型车会沿着黄色的轨迹线前行 这里以轨迹数据可视化为例,代码如下:

    2024年02月08日
    浏览(67)
  • MATLAB数学建模:数据图形可视化-三维绘图函数

    在 MATLAB 中, 我们可使用函数 surf 和 surfc 绘制三维曲面图. 调用格式如下: 以矩阵 ZZZ 所指定的参数创建一个渐变的三维曲面. 坐标 $x = 1:n, y = 1:m, $ 其中 [m,n]=size(Z)[m,n] = size(Z)[m,n]=size(Z) 以 ZZZ 确定的曲面高度和颜色, 按照 X,YX,YX,Y 形成的格点矩阵, 创建一个渐变的三维曲面. X,

    2024年02月06日
    浏览(60)
  • 计算机视觉 用于网格/点云等数据可视化的Python库

            很长一段时间,人们主要使用Matplotlib在Python中可视化3D内容。但是它不支持 GPU 硬件加速,所以很多人使用点云库(PCL)作为网格和点云可视化和分析的工具。PCL当然是用于 3D 分析的最佳库之一,而且它是用 C++ 构建的,Python包装器仅包含主PCL库功能的一小部分,

    2024年02月04日
    浏览(51)
  • 三维跨孔电磁波CT数据可视化框架搭建

    利用matlab实现对跨孔电磁波CT实测数据反演,并搭建了三维CT数据可视化框架,可装填实测CT反演数据。 对三维CT反演结果进行180°旋转,动态展示三维CT反演结果。 三维CT平面图 三维测线布置 CT数据解译结果。 2.1、CT数据格式整理并保存 2.2、三维可视化

    2024年02月10日
    浏览(41)
  • 数据可视化——用python绘制气泡图、三维散点图、多重柱形图案例

    目录 前言 一、气泡图的绘制 1、什么是气泡图?他适用于什么数据? 2、图形效果展示 3、导入需要用到的库 4、读取要分析的数据 5、检查数据是否有问题 6、将要对比数据提取出来 7、画图 二、三维散点图的绘制 1、什么是三维散点图? 2、导入需要用到的数据库 3、画图 三

    2024年02月06日
    浏览(63)
  • 3D目标检测数据集 KITTI(标签格式解析、3D框可视化、点云转图像、BEV鸟瞰图)

    本文介绍在3D目标检测中,理解和使用KITTI 数据集,包括KITTI 的基本情况、下载数据集、标签格式解析、3D框可视化、点云转图像、画BEV鸟瞰图等,并配有实现代码。 目录  1、KITTI数据集3D框可视化 2、KITTI 3D数据集 3、下载数据集 4、标签格式 5、标定参数解析 6、点云数据--投

    2024年02月08日
    浏览(42)
  • python三维建模可视化与交互,python三维建模可视化

    本篇文章给大家谈谈python三维建模可视化与交互,以及python三维建模可视化,希望对各位有所帮助,不要忘了收藏本站喔。 一、 内容介绍 人类是那么得有创造力,我们创造、发明、设计、生产了一切大自然没有直接给予我们的东西使我们的生活变得更轻松更美好。在过去,

    2024年01月23日
    浏览(62)
  • 编程探秘:Python深渊之旅-----数据可视化(八)

    客户提出了对数据报告和图表的具体要求,这使得团队需要快速掌握数据可视化的技巧。派超决定深入了解 Python 中的数据可视化工具。 派超 (兴奋地):我们有机会做些真正酷炫的数据报告了!我听说 Python 有很棒的图表库。 龙 (点头):没错,matplotlib 和 seaborn 是两个非

    2024年01月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包