
先扎实学好理论知识,熟练掌握基础的 *** 作。然后研究实例、做实战项目。
halcon底层功能算法多,运算性能快,开发需要一定软件功底和图像处理理论。halcon不能提供相应的界面编程需求,需要和vs来构造MFC界面或者QT使用,才能构成一套完整软件。做机器视觉的项目,拿到项目时一般遵循如下流程:第一步:需求分析,建立相应的方案;第二步:算法流程规划及业务逻辑设计;第三步:模块化编程及集成化实现;第四步:调试,根据反馈结果来不断的修改程序Bug,达到客户需求,最后交付客户及软硬件 *** 作文档。
学习机器视觉一定要结合项目实战,在实践中学习总结经验教训,系统化学习所需知识。要补充一定的C++知识,进行VS联合开发,客户现场的学习和现场调试,不断学习示例分析,掌握方法套路流程。根据实际问题,学习模块调用,按照方法套路学习。最好是先用HALCON实现图像处理部分,然后在VS2010开发软件中利用MFC图形界面实现出来,实践学习是最好的方法。发展趋势是结合神经网络、深度学习进行相应的人工智能机器视觉开发。
可能原因如下:
stop算子停止HDevelop程序的连续程序执行。如果发生这种情况,即使下面有大量的注释或其他不可执行的程序行,PC(程序计数器)仍停留在stop语句(而不是放在下一个可执行程序行),以便直接显示程序中断的原因。
算子相当于菜单栏中的stop行动(F9)。程序可以通过run (F5)继续。
可以通过在首选项对话框( preferencesdialog)中设置时间参数来重新定义行为。执行不会停止,而是在等待指定的时间段后继续执行。在这段时间内,程序可以被F9中断或者由一个运行命令继续。这由程序窗口第一列中的图标标记。
在VC环境下进行图像处理比在MATLAB下开发运算速度要快,但工作量要大的多,用MATLAB做图像处理,直接调用里面的相关函数就可以完成,而且比较直观,但满足不了在速度上要求比较高的场合。所以在VC环境下直接开发往往是首选,但由于VC只是一个开发环境,直接运用于图像处理的函数还得自己编写添加,所以往往很耗时。随着各类机器视觉软件的开发,各种机器视觉软件包也相继产生,HALCON就是一个比较强大的机器视觉软件,功能比较全,在HDevelop环境下开发比较容易,执行速度也较快。除此之外,HALCON也可以集成到其他开发环境下,这样可以节约底层开发时间,直接有效地运用它的函数库,可以产生很好的效果。下面就结合自己的经验,简单介绍一下在VC环境下如何使用HALCON库。
在VC环境下进行图像处理,往往需要自己写图像处理的类,现在有一些前人写好的类,比如CDib类、DIBAPI类等等,因此可以直接“拿来主义”。HALCON库就相当于一个封装好的类,通过在VC下进行一些简单的设置,我们就可以使用其里面的函数了。下面是在VC环境下如何设置:
1 首先在project->settings中的Link属性页中添加halconcpplib;
2 其次在project->settings中的C/C++属性页中的Preprocessor中添加目录$(HALCONROOT)\include,$(HALCONROOT)\include\cpp;
3 然后在project->settings中的Link属性页中input下来菜单中添加路径$(HALCONROOT)\lib\i586-nt4;
4 最后当然是不要忘了在程序中添加类的头文件了:#i nclude "HalconCpph"
上面的设置好了,一切OK了。下面就可以在程序中调用HDevelop中的函数了,比如图像增强函数emphasize(hImage, &hRotateImage, 7, 7, 20)等等。我们知道在HDevelop中通常图像是作为一个tuple变量,因此在VC中有必要进行变量转换,例如:
针对灰度图像可以将图像数转换成一个Hobject变量:
gen_image1(&hImage,"byte",WIDTH, HEIGHT,(long)m_pImageBuffer);
针对彩色图像,可以分别取出R、G、B三个分量:
ExtractRGB24Channels(m_pImageBuffer, m_pRed, m_pGreen,m_pBlue);
然后在转换为Hobject变量:
gen_image3(&hImage, "byte", width, height, (long )m_pRed, (long )m_pGreen, (long )m_pBlue);
接下来就可以调用图像处理函数了,比如
图像增强:emphasize(hImage, &hRotateImage, 7, 7, 20); //参数可以调整
阈值化:bin_threshold(hImage,&hRotateImage);
rgb1_to_gray(hImage,&hRotateImage);//转化为灰度图
把处理完的变量转换成到一个buffer中,用于图像显示:get_image_pointer1(hRotateImage,(long )&m_pImageBuffer,Type, &width1, &height1);
但在调用HALCON库函数时也碰到了一些问题,比如在图像旋转中rotate_image(hImage, &hRotateImage, 90, "constant"); 将处理后的变量转换成
get_image_pointer3(hRotateImage, (long )&m_pRed, (long )&m_pGreen, (long )&m_pBlue, Type, &width1, &height1);
ComposeRGB24(m_pRed, m_pGreen, m_pBlue, m_pImageBuffer);
而执行过程中出现错误,get_image_pointer3这个函数报错,Undefined gray value in get_image_pointer3还需解决!
边摸索边进步,在其他环境中的调用还需要试试,比如嵌入式 *** 作系统等等。
创建一个新文件,把help文件拷到其中即可。
在没有安装halcon软件的电脑上运行halcon编写的程序的方法如下。
1、把licensedat文件放到工程文件目录下。
2、把halcondll,halconcppdll文件复制到工程文件目录下。
3、创建C盘,ProgramFiles,MVTec,halcon然后把help文件拷到其中即可。
4、将mindvision内的dll库文件复制粘贴到工程文件目录下。
1、灰度转换-->二值化(硬阈值或者动态阈值处理)-->连通区域-->抠图(reduce_domin)
2、创建一个与原始图像一样大小纯黑色的图像gen_image_const()
3、将抠图得到的目标图像与创建的纯黑图像拼接,union1()
4、运用for循环,遍历每个坐标,获取灰度值(get_grayval),将灰度值等于0的剔除,剩下的就是目标灰度值与对应的坐标。
比价原始的办法,不知道是否有更简单的方法
可以用Halcon建立深度学习模型,并用到实际项目中。
流程大概是使用免费的 Halcon Deeplearing Label Tool制作模型后,导出成 hdl 文件,并在应用程序中用 ApplyDlClassifier 应用模型。
经过测试, ApplyDlClassifer 在第一次运行时,无论数据集有多大,执行时间在500ms左右(AMD 5800X + Nvidia P2200),能够明显感受到卡顿,而在第二次运行时,就感受不到卡顿。所以我考虑,在应用程序启动时,使用线程对模型进行预热。
预热听着高深,其实就是读取模型( ReadDlClassifier ) 并送入一张空白图。
下面演示我的做法:
21 封装一个自己的Application类
22 我将Halcon算子封装成一个单例类,并使用 getAlgorithmGlobalData 获得这个单例对象。 slotDoModelWarmUp 是这个单例类一个槽函数。
23 在 slotDoModelWarmUp 中开多线程,对模型进行预热。
我将Halcon深度学习算子要用到的变量封装成一个 context 结构体,放在单例类中。为了节约开销,我使用引用,直接获取这个单例对象。这样,在向线程中传参数时,需要一个 std::ref 。
线程函数如下:
classifierHandle 是一个引用变量,这使得我可以直接 *** 控单例类中的数据成员,而不是使用拷贝。
经过测试,在AMD 5800X + Nvidia P2200下,推理速度达到了1166ms。
环境:HALCON-2005-Progress + VS2019
要求:
功能:设置MFC窗口大小,显示Halcon。
MFCApplication1Dlgcpp源程序:
运行结果:
以上就是关于学习halcon没有相机怎么学全部的内容,包括:学习halcon没有相机怎么学、halcon停止扫描、如何在VC环境下使用HALCON库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)