0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HALCON项目应该使用哪种主机语言的观点

新机器视觉 来源:新机器视觉 2020-09-24 11:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大多数HALCON解决方案必须嵌入到主应用程序中(例如,提供图形用户界面),然后大多数机器视觉应用程序都是用c++c#实现的。下面是我们关于下一个HALCON项目应该使用哪种主机语言的观点,供读者参考。

语言选择

编程语言的选择对于公司来说是一个战略和长期的决策。这很难在一篇文章中详细解释。我们将尽最大努力强调C++和C语言之间的差异。评估和最终决策必须由一个公司或其HalCon开发人员来执行。

如果您或您的HALCON视觉应用程序开发人员只熟悉其中一种语言,那么这种语言就是一个非常重要的论据。您可能需要有很充足的理由才能更改为其他语言。

支持HALCON

HALCON支持使用HALCON / C ++和HALCON / .NET接口集成到C ++和C#主应用程序中。在大多数情况下,HALCON脚本的性能是类似。

垃圾收集器/确定性销毁(RAII)

C++具有RAII模式和具有超出范围的对象的确定性行为。因此,我们可以从C++语言中保证每一个分配的HIMAN,例如在图像采集循环中,自动释放之后,不会有内存泄漏。在C#中,通常很难实现这种可靠性,并且通常需要手动和容易出错的工作,例如手动调用my..Destroy()或GCHandle.Free()。但是,如果出现异常、早期循环或函数退出(继续、返回),C#中的这些清理调用很容易被忽略。此外,通常无法确保垃圾收集器不在应用程序的性能关键部分中运行。

托管与本地

本机代码是由C ++编译器生成的目标CPU的机器代码。它将进行高度优化,但这种优化在编译期间需要一些时间。因此,C ++程序往往会增加构建时间,但最终应用程序的启动时间会快,尤其是快速处理性能。

相反,C#程序仅编译为中间字节码。这可以在构建期间相对快速地完成,但代码将不会像使用优秀的C ++编译器那样进行优化。最终在运行时生成的机器代码将取决于目标系统,因此无法在开发人员的机器上进行分析。

作为现代C ++编译器可以实现的示例,以下使用简单的C ++代码来计算整数中的设置位数:

int count_bits_1(int a) {

int count = 0;

while (a) {

count++;

a &= (a-1);

}

return count;

}

This code compiles to

count_bits_1(int): # @count_bits_1(int)

popcnt eax, edi

ret

使用clang 6.0.0编译器,很容易看到生成的机器代码/汇编代码,例如使用Compiler Explorer。C ++编译器的优化步骤了解底层算法并将其转换为针对Intel x86 / x64 CPU的单个优化popcnt指令。

视窗

在开发C#代码时,其中一个目标是Windows作为唯一的操作系统,尽管其他目标系统可以通过使用Mono项目以有限的形式(例如,没有WPF)实现。C++代码可以非常便携,然后在许多不同的系统上运行,例如使用QT跨平台应用程序框架和WIDGET工具包。

HALCON扩展包,图像采集接口,数字I / O接口

如果HALCON / HDevelop(某些硬件接口,客户特定图像采集……)中缺少某些功能,则可以通过自定义扩展包,图像采集接口或数字I / O接口提供。这些只能用C或C ++语言编写。

外部库/开源库

许多外部库使用最低的公分母作为编程语言,即C或C ++:可以为C / C ++库编写C#包装器,但为C#库编写C ++包装器并不常见。这些用于C ++库的C#包装器有时已过时:例如,OpenCV 3.4于2017年12月发布,但直到2018年2月,相应的.NET-Wrapper Emgu.CV仅适用于OpenCV 3.3。

包装器通常很难使用,因为它们必须将C ++结构映射到C#,这并不总是100%适合:例如,HALCON库是用C开发的,并且有一个C#包装器(HALCON / .NET)。在C#中访问图像矩阵很复杂:

GCHandle gch = GCHandle.Alloc(color_image);

image.GetImagePointer3(out pr, out pg, out pb, out type, out width, out height);

byte[] red_managed= new byte[width*height];

Marshal.Copy(pr, red_managed, 0, width*height);

// …

gch.Free();

大多数Windows内部库本身都是用C/C++开发的,并且.NETFramework仅仅是这些库的包装器。

硬件驱动程序

有些开发只可能在C或c++中实现,例如硬件驱动程序。如果以后需要做这些工作,并且公司中只存在c#知识,那么必须重新开发c++知识。

调试

在Visual Studio中调试c#有时更容易。

示例:HALCON异常

代码

HImage color_image = color_image_small.ZoomImageSize(4000, 3000, “WRONG”);

throws in C# a meaningful

HalconDotNet.HOperatorException: ‘HALCON error #3147: Wrong interpolation mode in operator zoom_image_size’

but the C++ exception is meaningless:

Unhandled exception at 0x00007FFB288F3FB8 in MyApp.exe: Microsoft C++ exception: HalconCpp::HOperatorException at memory location 0x0000007469EFF718.

示例:观看HALCON Tuples

C#:

var t = new HTuple();

t [0] = 42;

t [1] =“字符串”;

监视窗口:名称:t,值:{[42,“string”]}

在C ++中,这种内省不可能是开箱即用的:

HTuple t = HTuple(42).Append(“string”);

观察窗口:名称:t,值:<信息不可用…

另一方面,HALCON Variable Inspect扩展可用于两种编程语言。

低级代码

在C ++中开发时,低级代码通常运行得更快:

示例:颜色转换

有时,必须在GUI框架中使用HALCON彩色图像。GUI框架通常使用交错颜色格式(RGB RGB RGB …),而HALCON使用每个通道的灰度值块(RRR … GGG … BBB …)。对于某些彩色图像,转换为交错格式在C ++中需要25毫秒,在C#中需要60毫秒。另一方面,从C#调用的HALCON代码或从C#调用的HALCON代码之间的性能差异通常可以忽略不计。

集成开发环境

C ++有许多集成开发环境(IDE),但C#IDE的选择较少。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1965

    浏览量

    39864
  • C++
    C++
    +关注

    关注

    22

    文章

    2129

    浏览量

    77363
  • 编译器
    +关注

    关注

    1

    文章

    1672

    浏览量

    51907

原文标题:基于HALCON的机器视觉开发,C++或C#如何选择?

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    labview插入.net控件,运行报错,提示“无法加载控件”。有哪位大佬知道什么原因吗?

    labview2020,32位,halcon19.11,64位。(halcon可以正常使用)
    发表于 04-18 23:03

    Oracle软件在主机平台的应用

    在数字化转型浪潮中,企业核心业务系统对数据库的稳定性、性能与扩展性提出严苛要求。Oracle数据库凭借其深厚的技术积淀与主机平台(大型机、高端Unix小型机)的强强联合,成为金融、电信、能源等行业
    的头像 发表于 03-14 14:18 732次阅读

    一个电梯拽引主机多少块强力磁钢?

    电梯拽引主机通常由电机、齿轮和制动器等部件组成,用于提供电梯运行时的动力和控制,在电梯拽引主机中,强磁钢一般指永磁体,它们在电机中扮演重要角色,用于产生磁场以驱动电机运转或控制制动器的释放。一个电梯
    的头像 发表于 03-12 15:51 134次阅读
    一个电梯拽引<b class='flag-5'>主机</b>多少块强力磁钢?

    OpenClaw 落地新选择!视美泰 AI 主机盒率先适配,打造人人能用的本地智能体

    想让AI帮你干活,不用复杂操作、不怕数据泄露、还能低成本落地?2026年超火的开源AI项目OpenClaw,搭配视美泰专属适配的AI主机盒,就能实现!一OpenClaw到底是啥?能帮我们做些
    的头像 发表于 03-02 17:03 1675次阅读
    OpenClaw 落地新选择!视美泰 AI <b class='flag-5'>主机</b>盒率先适配,打造人人能用的本地智能体

    Q71200G6 小型主机视频展示:多 2.5GbE 网口平台的结构设计

    主机
    jf_79590227
    发布于 :2026年01月12日 15:18:15

    三防漆哪种好?别再问了!记住这个选型逻辑,比品牌更重要

    “三防漆哪种好?”——这是电子工程师、采购和制造从业者最高频的问题之一。但坦白说,这是一个“伪命题”。就像问“车哪种好?”一样,没有前提条件,答案毫无意义。没有最好的三防漆,只有最适合您产品应用
    的头像 发表于 12-23 17:41 719次阅读
    三防漆<b class='flag-5'>哪种</b>好?别再问了!记住这个选型逻辑,比品牌更重要

    低功耗蓝牙项目,Nordic应该如何选型?

    在低功耗蓝牙的世界里,Nordic的nRF52系列是许多开发者信赖的选择。但面对不同的型号,如何找到与项目最“合拍”的那一颗?今天,我们从核心参数出发,为您梳理一份清晰的选型参考。nRF52810
    的头像 发表于 12-23 14:13 385次阅读
    低功耗蓝牙<b class='flag-5'>项目</b>,Nordic<b class='flag-5'>应该</b>如何选型?

    光庭信息与为旌科技自动泊车PoC项目通过主机厂验收

    近日,光庭信息与战略合作伙伴为旌科技,基于为旌御行车载芯片平台VS919共同开发的全自动泊车(APA)与全景环视(AVM)融合系统的PoC项目,已成功通过国内某知名主机厂的严格验收。
    的头像 发表于 12-05 11:39 925次阅读

    优比施技术揭秘:守护机房稳定的UPS主机,究竟强在哪?

    UPS主机
    上海优比施电子科技有限公司
    发布于 :2025年11月20日 09:16:51

    新手小白必看!关于A100云主机租用,你想知道的一切都在这!

    最通俗易懂的语言,为你准备了一份超详细的A100云主机租用新手指南,帮你扫清所有障碍,轻松开启AI之旅。Q1:A100云主机到底是什么?我租了能得到什么?把它想象成一
    的头像 发表于 10-31 19:24 1973次阅读
    新手小白必看!关于A100云<b class='flag-5'>主机</b>租用,你想知道的一切都在这!

    运行自己编写的C语言项目的E203软件仿真环境的搭建

    ,如何让E203能够在软件仿真的环境下运行自己编写的C语言代码呢? 以下是我们的方案。 首先,hbird-sdkapplicationbaremetal目录下放置着一些测试程序,以helloworld
    发表于 10-20 06:44

    主机板基本工作电压资料

    电子发烧友网站提供《主机板基本工作电压资料.ppt》资料免费下载
    发表于 08-26 15:12 0次下载

    C++ 与 Python:树莓派上哪种语言更优?

    Python是树莓派上的首选编程语言,我们的大部分教程都使用它。然而,C++在物联网项目中同样广受欢迎且功能强大。那么,在树莓派项目中选择哪种语言
    的头像 发表于 07-24 15:32 1107次阅读
    C++ 与 Python:树莓派上<b class='flag-5'>哪种</b><b class='flag-5'>语言</b>更优?

    国产电脑主机信创兆芯KX-7000

    电脑主机
    jf_10805031
    发布于 :2025年05月21日 14:48:04