halcon与c#联合编程的方法_halcon声成c#解释-程序员宅基地

技术标签: c#  计算机视觉  

一、VS引用halcondotnet.dll后直接编程

但是如果你不是大牛会存在非常严重的内存泄漏问题,极其不推荐这样做。

二、用Halcon编好程序后导成C#

然后导出.cs为后缀的c#程序,主函数在Action方法里。

但是这种方法最然简便,但是偶尔也会在程序编译正确的情况下运行报错。

三、用Halcon引擎

虽然较上面的办法速度可能相对慢一些,不过稳定性大大提升而且运行速度也还可以。

首先先引用这两样东西,它在Halcon安装目录下。例如:E:\Halcon12\bin\dotnet35

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HalconDotNet;

namespace Halcon引擎
{
    public partial class Form1 : Form
    {
        private HDevOpMultiWindowImpl MyHDevOperatorImpl;
        private HWindow Window;
        string ProgramPathString;//halcon程序路径
        private HDevEngine MyEngine = new HDevEngine();//引擎
        private HDevProgramCall ProgramCall;
        //private HDevProcedureCall ProcCall;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {          
            ProgramPathString = @"G:\拉带\create_shape_model_xld.hdev";

            Window = hWindowControl1.HalconWindow;
            Window.SetDraw("margin");
            Window.SetLineWidth(4);
        }
//用HWindow窗口句柄创建实例用于显示
        private void button1_Click(object sender, EventArgs e)
        {
            //设置程序运行结果的显示窗口
            //如果没有这两句,屏幕上除了运行结果文字,其它图形都没有显示。
            MyHDevOperatorImpl = new HDevOpMultiWindowImpl(hWindowControl1.HalconWindow);
            MyEngine.SetHDevOperators(MyHDevOperatorImpl);
            try
            {
                var Program = new HDevProgram(ProgramPathString);
                ProgramCall = new HDevProgramCall(Program);//call主函数
                MessageBox.Show("ok");
            }
            catch (HDevEngineException Ex)
            {
                MessageBox.Show(Ex.Message, "HDevEngine Exception");
                return;
            }
            catch
            {
                return;
            }
        }
//运行
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                ProgramCall.Execute();
            }
            catch (HDevEngineException Ex)
            {
                MessageBox.Show(Ex.Message, "HDevEngine Exception");
            }
        }
    }
}

补充:如果你的窗体上的图片显示不全,则把上面代码改成MyHDevOperatorImpl = new HDevOpFixedWindowImpl(hWindowControl1.HalconWindow);

未完待续……||  2021/1/17

如果是需要call自定义的halcon外部函数,则需要像如下这样写:

//首先把外部函数所在文件夹的地址导入:
MyEngine.SetProcedurePath(@"C:\Users\Administrator\Desktop\新建文件夹");
//再把你所需要call的函数名像如下填写
string procedureName = "draw_roi";
//call函数                    
var procedureCall = new HDevProcedureCall(new HDevProcedure(procedureName));
//设置函数的输入参数,第一个参数是Halcon形参参数名,第二个参数是你所需要传的实参
procedureCall.SetInputIconicParamObject("Image", ho_Image);
//运行
procedureCall.Execute();
//得到函数的返回值
HTuple ModelId = procedureCall.GetOutputCtrlParamTuple("ModelId");

这里我稍微介绍一下如何编写Halcon外部函数:

1、打开Halcon,点击创建新函数

2、类型选择为HDevelop函数文件,目录自己选择一下,名称自拟

3、参数箭头靠上的是输入,箭头靠下的是输出,编译好主函数之后包装成方法会有参数名,依照需求选定输入/出

或者先定义好参数,点击确定,然后去自定义的目录去打开外部函数,再编写语句。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_48705696/article/details/112747982

智能推荐

PerfDog-移动端性能测试-基本使用_perfdog在跑性能的过程中能录屏吗-程序员宅基地

文章浏览阅读941次。常见的腾讯性能测试工具:腾讯gt、腾讯wetest、腾讯perfdog腾讯perfdog: https://perfdog.qq.com/一、介绍:移动全平台iOS/Android性能测试、分析工具平台。快速定位分析性能问题,提升APP应用及游戏性能和品质。手机无需ROOT/越狱,手机硬件、游戏及应用APP也无需做任何修改,极简化即插即用。Windows & Mac OS X平台PerfDog桌面应用程序版本都支持对iOS和Android设备进行测试。PC上PerfDog可多开,单PC可._perfdog在跑性能的过程中能录屏吗

Git远程仓库配置SSH(gitHub为例)_git 登录到gitlab ssh账户命令-程序员宅基地

文章浏览阅读1.6k次。git配置giehub远程仓库_git 登录到gitlab ssh账户命令

jsp执行原理(详解)_jsp页面运行原理-程序员宅基地

文章浏览阅读1.3w次,点赞8次,收藏65次。1. jsp的工作模式jsp的工作模式是***请求/相应模式***,客户端首先发出HTTP请求,jsp程序收到请求后会进行处理并返回处理结果。在一个jsp文件第一次被请求时,jsp引擎(容器)把该jsp文件转换成一个Servlet,而这个引擎本身也是一个Servlet。2. jsp的工作原理:客户端通过浏览器向服务器发出请求,在该请求中包含了请求的资源的路径,这样当服务器接收到该请求后就可以知道被请求的内容。服务器根据接收到的客户端的请求来加载相应的JSP文件。Web服务器中的J_jsp页面运行原理

java合一算法_Prolog语言的编译原理:合一算法-程序员宅基地

文章浏览阅读373次。Prolog语言的编译原理:合一算法分类:软考|更新时间:2016-07-08|来源:转载Prolog是一种基于谓词演算的程序设计语言。Prolog是一种说明性语言,它的基本意思是程序员着重于描述问题而不是指定一组指令来解决问题。Prolog程序是一组子句的集合,每个子句要么是事实要么是规则,子句表示属性或者个体之间的关系。Prolog的语法和谓词演算的语法接近。例如,下面是一些事实的例子:met..._prolog java

6-12 判断奇偶性(10分)_6-3 判断奇偶性 分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 本题要-程序员宅基地

文章浏览阅读804次。6-12 判断奇偶性 (10 分)本题要求实现判断给定整数奇偶性的函数。函数接口定义:int even( int n );其中n是用户传入的整型参数。当n为偶数时,函数返回1;n为奇数时返回0。注意:0是偶数。裁判测试程序样例:#include <stdio.h>int even( int n );int main(){ int n; scanf("%d", &n); if (even(n)) print_6-3 判断奇偶性 分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 本题要

MATLAB指纹识别系统[GUI]_matlab gui 指纹图像预处理-程序员宅基地

文章浏览阅读908次,点赞21次,收藏22次。MATLAB指纹识别系统[GUI,预警]一、课题介绍随着生物识别技术的不断发展,人们发现每个人的指纹具有唯一性和不变性。因此指纹识别技术逐步发展为一种新的身份识别方式,并且凭借其良好的安全可靠性,大有取代传统身份识别方式的趋势。本文简要介绍了指纹识别的基本步骤,分别是指纹图像预处理、指纹特征提取、指纹匹配。在图像预处理中,依次介绍了规格化处理、图像增强、二值化处理和细化处理的方法。预处理后将得到一幅宽度为一个像素的细化二值图像,然后通过特定的端点和交叉点的特征进行指纹匹配。实验表明,该方法效果良好。二、算_matlab gui 指纹图像预处理

随便推点

HttpRequestUtil方法get、post、JsonToPost_httprequestutil.httpget-程序员宅基地

文章浏览阅读785次。java后台发起请求使用的工具类package com.cennavi.utils;import org.apache.http.Header;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apach_httprequestutil.httpget

App-V轻量级应用程序虚拟化之三客户端测试-程序员宅基地

文章浏览阅读137次。在前两节我们部署了App-V Server并且序列化了相应的软件,现在可谓是万事俱备,只欠东风。在这篇博客里面主要介绍一下如何部署客户端并实现应用程序的虚拟化。在这里先简要的说一下应用虚拟化的工作原理吧!App-V Streaming 就是利用templateServer序列化出一个软件运行的虚拟环境,然后上传到app-v Server上,最后客户..._app-v 客户端

实时视频传输方案汇总-java_eclipse视频传输设计-程序员宅基地

文章浏览阅读4.6k次。实时视频传输方案汇总-java目录libstreamingh264jrtsp-h264-clientOpenFlowihmc-video-codecs目录libstreaminghttps://github.com/fyhertz/libstreamingIntroductionWhat it doeslibstreaming is an API that allows you, wi..._eclipse视频传输设计

unbantu上python安装步骤_如何在Ubuntu中安装Python 3.6?-程序员宅基地

文章浏览阅读230次。Python是增长最快的主要通用编程语言。原因有很多,比如它的可读性和灵活性,易于学习和使用,可靠和高效。有两个主要的Python版本被使用- 2和3 (Python的现在和未来);前者将看不到新的主要版本,而后者正在积极开发中,在过去几年已经看到了许多稳定的版本。Python 3的最新稳定版本是3.6版。Ubuntu 18.04和Ubuntu 17.10都预装了Python 3.6,这与老版本的..._ubuntu 14.04 安装python 3.6

NXP NFC Reader Library 移植思路_nxpnfcreader-程序员宅基地

文章浏览阅读1.1k次。记录 NXP 的 SDK 移植到 STM32 的过程,没有完成移植,中途暂停了。 _nxpnfcreader

分享几个适合新手的C/C++开源项目_c++项目-程序员宅基地

文章浏览阅读9.1k次,点赞10次,收藏147次。分享几个适合新手的C/C++开源项目今天主要给大家分享一些github内适合初学者练手的c/c++开源项目。所有项目均提供项目下载地址,无法使用github的读者,也可在公众号内回复:c开源项目 进行获取项目一:C-Plus-Plus项目介绍C-Plus-Plus是收录用 C++ 实现的各种算法的集合,并按照 MIT 许可协议进行授权。这些算法涵盖了计算机科学、数学和统计学、数据科学、机器学习、工程等各种主题。除外,你可能会发现针对同一目标的多个实现使用不同的算法策略和优化。支持环境:M_c++项目

推荐文章

热门文章

相关标签