Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【基础篇】一步一步实现c#与halcon联合编程

【基础篇】一步一步实现c#与halcon联合编程

作者头像
threeQing
发布于 2020-09-14 08:51:27
发布于 2020-09-14 08:51:27
11.4K68
代码可运行
举报
运行总次数:8
代码可运行

联合编程实践分俩部分

-》算法开发;

-》软件开发

第一部分 算法开发

Step 1 :环境准备

  1. 软件准备 --vs2017 halcon2019

注:其他版本亦可,步骤一样

b. 原图准备--任意一张图片

Step 2:打开halcon软件,输入以下程序

  1. 实现功能:图像分割 ->>统计个数
  2. 输入以下程序
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*1.读图
read_image (Test, 'C:/Users/Administrator/Desktop/test.png')
*2.彩色图转灰度图
rgb1_to_gray (Test, GrayImage)
*3.二值化
threshold (GrayImage, Regions, 0, 248)
*4.孔洞填充
fill_up (Regions, RegionFillUp)
*5.区域分割
connection (RegionFillUp, ConnectedRegions)
*6.面积筛选
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 52504.6, 153432)
*7.统计个数
count_obj (SelectedRegions, Number)

c. 运行效果如下

Step3:导出c#程序

a. 点击“文件” -》“导出”;

b.弹出如下窗口

c. 点击右侧文件夹图标,配置导出文件路径和格式,此Demo配置如下;

d. 其他选项一般默认即可,点击“导出”,会在配置路径下出现对应.cs文件;

Step 4 : 二次封装

a. 打开VS软件,新建类库;

b. 右键解决方案的依赖项,选择“添加引用”;

c. 点击浏览,找到halcon安装目录下的halcondonet.dll, 添加-》确定;

d. 右键项目“CountObjTool”,点击“添加” -》“现有项”,选择刚才导出的程序文件;

f. 将默认的Class1删除,并打开刚导入的类文件,找到方法action(),除此方法外,将其他方法都删除,并将程序整理如下;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

using HalconDotNet;

namespace CountObjTool
{
    public class CountObjTool
    {

        public void action()
        {

            // Local iconic variables

            HObject ho_Test, ho_GrayImage, ho_Regions;
            HObject ho_RegionFillUp, ho_ConnectedRegions, ho_SelectedRegions;

            // Local control variables

            HTuple hv_Number = new HTuple();
            // Initialize local and output iconic variables 
            HOperatorSet.GenEmptyObj(out ho_Test);
            HOperatorSet.GenEmptyObj(out ho_GrayImage);
            HOperatorSet.GenEmptyObj(out ho_Regions);
            HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            //1.读图
            ho_Test.Dispose();
            HOperatorSet.ReadImage(out ho_Test, "C:/Users/Administrator/Desktop/test.png");
            //2.彩色图转灰度图
            ho_GrayImage.Dispose();
            HOperatorSet.Rgb1ToGray(ho_Test, out ho_GrayImage);
            //3.二值化
            ho_Regions.Dispose();
            HOperatorSet.Threshold(ho_GrayImage, out ho_Regions, 0, 248);
            //4.孔洞填充
            ho_RegionFillUp.Dispose();
            HOperatorSet.FillUp(ho_Regions, out ho_RegionFillUp);
            //5.区域分割
            ho_ConnectedRegions.Dispose();
            HOperatorSet.Connection(ho_RegionFillUp, out ho_ConnectedRegions);
            //6.面积筛选
            ho_SelectedRegions.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                "and", 52504.6, 153432);
            //7.统计个数
            hv_Number.Dispose();
            HOperatorSet.CountObj(ho_SelectedRegions, out hv_Number);


            ho_Test.Dispose();
            ho_GrayImage.Dispose();
            ho_Regions.Dispose();
            ho_RegionFillUp.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_SelectedRegions.Dispose();

            hv_Number.Dispose();

        }


    }

}

g. 整理输入参数、输出参数、检测方法,继续对此类封装,程序如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using HalconDotNet;

namespace CountObjTool
{
    public class CountObjTool
    {

        /// <summary>
        /// 输入源图像
        /// </summary>
        public HObject srcImg = null;

        /// <summary>
        /// 输出个数
        /// </summary>
        public int number = 0;

        /// <summary>
        /// 检测方法
        /// </summary>
        public void action()
        {
          
            //2.彩色图转灰度图
            HOperatorSet.Rgb1ToGray(srcImg, out HObject ho_GrayImage);
            //3.二值化
            HOperatorSet.Threshold(ho_GrayImage, out HObject ho_Regions, 0, 248);
            //4.孔洞填充
            HOperatorSet.FillUp(ho_Regions, out HObject ho_RegionFillUp);
            //5.区域分割
            HOperatorSet.Connection(ho_RegionFillUp, out HObject ho_ConnectedRegions);
            //6.面积筛选
            HOperatorSet.SelectShape(ho_ConnectedRegions, out HObject ho_SelectedRegions, "area",
                "and", 52504.6, 153432);
            //7.统计个数
            HOperatorSet.CountObj(ho_SelectedRegions, out HTuple hv_Number);

            number = hv_Number[0].I;

            ho_GrayImage.Dispose();
            ho_Regions.Dispose();
            ho_RegionFillUp.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_SelectedRegions.Dispose();

            hv_Number.Dispose();

        }


    }

}

第二部分 软件开发

Step 5 : 新建winform工程

a. 邮件解决方案CountObjTool,“添加”-》“新建项目”,选择“WIndows窗体应用”;

Step 6 : 关联算法项目、halcondotnet.dll 以及halconWindow控件

a. 选择项目CountObj,右键"引用" - 》"添加引用";

b. 选择"项目" -》"CountObjTool";

c.选择"浏览" -》"halcondotnet.dll";

d.打开工具箱,在空白处右键-选择项-

e. 点击”浏览“,选择下边文件”halcolcondotnet.dll“,在工具箱中添加halconWindow控件;

e. 勾选中下图加深的两个halcon组件,并点击确定;

f.工具会更新如下halcon显示控件;

Step 7 : 软件界面设计

a.添加如下窗体控件;

Step 8 : 逻辑代码设计

a.实例化对象计数工具类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CountObjTool.CountObjTool tool = new CountObjTool.CountObjTool();

b.双击读图按钮,其事件代码如下;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  private void btnReadImg_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    HOperatorSet.ReadImage(out tool.srcImg, openFileDialog.FileName);
                    HOperatorSet.GetImageSize(tool.srcImg, out HTuple hv_Width, out HTuple hv_Height);
                    HOperatorSet.SetPart(this.hWindowControl1.HalconWindow, 0, 0, hv_Height - 1, hv_Width - 1);
                    HOperatorSet.DispObj(tool.srcImg, this.hWindowControl1.HalconWindow);
                }

            }
            catch (Exception)
            {

                MessageBox.Show("图片文件错误!");
            }
        }

b.双击运行按钮,其事件代码如下;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 private void btnRun_Click(object sender, EventArgs e)
        {
            try
            {
                tool.action();
                txtCount.Text = tool.number.ToString();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

c.软件界面所有代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using HalconDotNet;
using System;
using System.Windows.Forms;

namespace CountObj
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        CountObjTool.CountObjTool tool = new CountObjTool.CountObjTool();

        private void btnReadImg_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    HOperatorSet.ReadImage(out tool.srcImg, openFileDialog.FileName);
                    HOperatorSet.GetImageSize(tool.srcImg, out HTuple hv_Width, out HTuple hv_Height);
                    HOperatorSet.SetPart(this.hWindowControl1.HalconWindow, 0, 0, hv_Height - 1, hv_Width - 1);
                    HOperatorSet.DispObj(tool.srcImg, this.hWindowControl1.HalconWindow);
                }

            }
            catch (Exception)
            {

                MessageBox.Show("图片文件错误!");
            }
        }

        private void btnRun_Click(object sender, EventArgs e)
        {
            try
            {
                tool.action();
                txtCount.Text = tool.number.ToString();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }



    }
}

Step 9 运行

a.运行前先进行以下设置,否则可能报”试图加载不正确格式“的错误;

  • 右键项目”CountObj“,选择“设为启动项目”;
  • 右键项目”CountObj“,选择”属性“,取消勾选”首选32位“;(64位halcon)

b.运行结果如下图所示;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器视觉那些事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
6 条评论
热度
最新
您的这些链接都失效了 请问还有哪可以下载
您的这些链接都失效了 请问还有哪可以下载
回复回复点赞举报
你好,请问下运行 bazel build -c opt --config=mkl //tensorflow/lite/c:tensorflowlite_c.dll 的时候 一直出现 Loading:0 package loaded 是什么意思呢?无法下载还是下载慢
你好,请问下运行 bazel build -c opt --config=mkl //tensorflow/lite/c:tensorflowlite_c.dll 的时候 一直出现 Loading:0 package loaded 是什么意思呢?无法下载还是下载慢
回复回复点赞举报
hi你好,想请问一下,用这种方法编译出来的是64位的dll和lib,请问如何编译32位的呢?
hi你好,想请问一下,用这种方法编译出来的是64位的dll和lib,请问如何编译32位的呢?
33点赞举报
64位的,tensorflow不支持32位
64位的,tensorflow不支持32位
回复回复点赞举报
这样的呀,之前我们用Linux编译的话,是有32和64位的,那tensorflow是只在windows下是不支持32位的吗?
这样的呀,之前我们用Linux编译的话,是有32和64位的,那tensorflow是只在windows下是不支持32位的吗?
回复回复点赞举报
查看全部3条回复
推荐阅读
编辑精选文章
换一批
【原创】记录我一次详细的TensorFlow源代码编译构建安装包总结
最近公司给我们分配了2台虚拟机服务器用于强化学习训练,我们在虚拟环境中安装好了TensorFlow环境后,在import tensorflow时发现报了下面的错误:
黄鸿波
2020/11/19
2.4K0
【原创】记录我一次详细的TensorFlow源代码编译构建安装包总结
【Ubuntu】Tensorflow对训练后的模型做8位(uint8)量化转换
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
superhua
2019/10/22
1.8K0
【Ubuntu】Tensorflow对训练后的模型做8位(uint8)量化转换
Electron9.x +vue+ffi-napi 调用Dll动态链接库
本文主要介绍在 Electron9.x 中,使用ffi-napi,ref-array-napi,ref-napi 加载 Windows 动态链接库,并在Vue 渲染进程中使用。使用过程中会遇到一系列的坑,本文将会一一解决,并解释原因。如有同行兄弟遇到此问题可以借鉴。
治电小白菜
2022/09/08
5.1K0
【TensorFlow实战——笔记】第3章:TensorFlow第一步_TensorFlow的编译及安装
不管哪种情况,我们都推荐使用Anaconda作为Python的环境,因为可以避免大量的兼容性问题。
石瞳禅
2018/09/18
8150
【TensorFlow实战——笔记】第3章:TensorFlow第一步_TensorFlow的编译及安装
TensorFlow的安装
在本篇文章中,我们将会介绍TensorFlow的安装,TensorFlow是Google公司在2015年11月9日开源的一个深度学习框架。
夜雨飘零
2020/05/06
1.9K0
使用GitHub镜像加速TensorFlow编译
由于GitHub的访问不是很稳定,速度经常很慢,这就给某些需要编译TensorFlow的同学带来了问题,因为TensorFlow主代码库放在GitHub上,更麻烦的是TensorFlow有很多第三方依赖库也在GitHub上,即使通过访问gitee等国内代码库把TF的代码clone下来,编译的时候也可能出问题,因为bazel需要在编译的时候动态下载GitHub上的第三方库。
windmaple
2022/03/30
2K0
编译tensorflow-lite-with-select-tf-ops遇到的坑
官方没有直接给出AAR,而是让自己用巴泽尔去编译一个,实在是有点坑啊。
vell001
2018/12/28
5.8K0
编译tensorflow-lite-with-select-tf-ops遇到的坑
Tensorflow(GPU) 在Win10+Cuda8.0环境下安装以及Cudnn包配置 图文详细教程
原本安装好之后并不会有以上四个环境变量,有两个需要自己加上。 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\libnvvp 附配置环境变量教程 最后在cmd里输入 echo %path% 就能查看你的是否添加进环境变量了
大鹅
2021/06/15
1.5K0
Tensorflow(GPU) 在Win10+Cuda8.0环境下安装以及Cudnn包配置 图文详细教程
tensorflow GPU版本配置加速环境
环境:Anaconda 、tensorflow_gpu==1.4.0 (这里就用1.4.0版本做演示了,虽然现在的已经是2.0版本了)
陶陶name
2022/05/12
7750
想提高棋艺?试试这款围棋AI
作为一名围棋渣渣,时不时会上对弈平台下下棋。围棋太博大精深,非常惭愧,虽然在下棋上花的时间很多,但一直处在菜鸟阶段,长期在1级和1段之间徘徊(腾讯野狐围棋上的排位)。要提升水平,需要下功夫去记定式、做死活题,但那太枯燥了,相较而言,我更喜欢上网厮杀,屠龙或被屠,爽一把再说。我等初级选手,经常会碰到那种不按套路的对手,有时明明觉得对方下了无理手,但就是不知道如何反击。再就是棋盘太空旷,不知如何选点。这些虽然在书上可以学到一些基本技巧,但一到实战,往往不知如何下手。
云水木石
2019/11/07
3.5K0
想提高棋艺?试试这款围棋AI
TensorFlow下载与安装
TensorFlow简介 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。 TensorFlow可被用于语音识别或图像识别等多项机器深度学习领域,对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在
xiangzhihong
2018/02/08
2K0
TensorFlow下载与安装
TensorFlow 入门指南
但在开始之前,先来看看一个最简单的使用 TensorFlow Python API 的示例代码,这样你就会对我们接下来要做的事情有所了解。
竹清
2018/08/31
1.4K0
TensorFlow 入门指南
TensorFlow2.0 系列开篇: Windows下GPU版本详细安装教程
1. Anaconda a. 下载 首先进入Anaconda的官网: https://www.anaconda.com/distribution 选择Windows下Python3.7(注意:必须选择64位,因为TF不支持Python32位的)
Datawhale
2019/07/08
7.7K0
TensorFlow2.0 系列开篇: Windows下GPU版本详细安装教程
1.3 centos7源码编译tensorflow-gpu版
很巧的是编译安装tensorflow-gpu版成功了。 tensorflow已经更新到1.13版,官方的linux安装文件采用的是glibc2.23, 而centos只支持到glibc2.17,所以在使用pip install tensorflow-gpu安装后的使用过程中会报错:
锦小年
2019/05/26
2.2K0
win10下配置Tensorflow1.4
本文介绍了如何配置Windows系统以支持TensorFlow 1.4,包括安装Python 3.5或更高版本、CUDA 8.0或更高版本、cuDNN 7.6或更高版本,以及TensorFlow 1.4。安装完成后,可以测试是否成功安装并运行TensorFlow。
GavinZhou
2018/01/02
1.4K0
win10下配置Tensorflow1.4
0490-如何为GPU环境编译CUDA9.2的TensorFlow1.8与1.12
从CDSW1.1.0开始支持GPU,具体可以参考Fayson之前的文章《如何在CDSW中使用GPU运行深度学习》,从最新的CDSW支持GPU的网站上我们可以查到相应的Nvidia Drive版本,CUDA版本以及TensorFlow版本,如下:
Fayson
2019/01/02
3.7K1
Tensorflow | win10中安装tensorflow-0.12.1 (0.12.1以后的版本安装均适用)
本文首发在CSDN博客:http://blog.csdn.net/xxzhangx/article/details/54379255 前几天,谷歌推出了windows对tensorflow的支持,我参考下面两篇博文来安装了我的tensorflow。 为表示对原作者的尊敬,先列出参考的文章。 参考文献 https://m.aliyun.com/yunqi/articles/68435 http://blog.csdn.net/zhuxiaoyang2000/article/details/5
努力在北京混出人样
2018/05/14
3.2K0
Win10+RTX2080深度学习环境搭建:tensorflow、mxnet、pytorch、caffe
笔者通过官网、通过conda、通过豆瓣镜像源安装tensorflow在import时都会失败,报“ImportError: DLL load failed: 找不到指定的模块”的错误,最终成功的安装方式如下:
李拜六不开鑫
2018/12/28
2.9K2
Windows下从零搭建深度学习环境Tensorflow+PyTorch(附深度学习入门三大名著)
首先安装python环境,推荐Anaconda+jupyter,而不是Pycharm
自学气象人
2023/06/21
8590
Windows下从零搭建深度学习环境Tensorflow+PyTorch(附深度学习入门三大名著)
TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
作者:刘才权 编辑:田 旭 安装平台 1 平台 目前TensorFlow已支持Mac、Ubuntu和Windows三个主流平台(64位平台), 2 GPU vs CPU 在安装时可以选择安装版本是否
机器学习算法工程师
2018/03/06
1.8K0
TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
推荐阅读
相关推荐
【原创】记录我一次详细的TensorFlow源代码编译构建安装包总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验