halcon学习和实践(从halcon转化为opencv)

Posted 嵌入式-老费

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了halcon学习和实践(从halcon转化为opencv)相关的知识,希望对你有一定的参考价值。

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        halcon本身还是商业软件,从学习的角度来使用无可厚非,但是如果用在商业上面,那么就必须要获得halcon的授权,这是底线。那么既然学了halcon,又不想支付高额的授权费用,那么只有两条路了。第一个就是自己写一个image的库,另外一个就是寻找开源库,比如opencv就是其中的一种开源库。

        从最早的opencv2开始,目前最新的opencv已经进化到了opencv4。opencv目前支持的语言主要是c++和python两种。c++基础比较好的同学,完全可以用c++来进行开发,这主要体现在最终部署上面。而在平时学习的时候,最好使用python来学习,这样比较方便,也比较快捷。因为在图像处理的过程中,一个很重要的部分,就是参数的标定工作。如果每次都是用c++来测试的话,那么标定一次,就要重新编译一次。这就显得很麻烦。当然也有比较讨巧的办法,就是把标定的数据变成字符串,这样不重新编译c++,直接修改exe文件也可以达成调参不重编的目的

        还是以之前audi2的例子为证,我们看一下如果需要变成opencv应该怎么做。

        首先,还是看一下halcon的代码,

read_image (Audi2, 'audi2')
fill_interlace (Audi2, ImageFilled, 'odd')
threshold (ImageFilled, Region, 0, 90)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'width', 'and', 30, 70)
select_shape (SelectedRegions, Letters, 'height', 'and', 60, 110)
dev_clear_window ()
dev_set_colored (12)
dev_display (ImageFilled)
dev_display (Letters)

        这段代码相信大家看了很多遍,早已经熟记在心。那么,下面需要做的就是一个一个找到对应的opencv函数即可,
       

 read_image ===>cv2.imread

 threshold===>cv2.threshold

 connection===>cv2.findContours

 select_shape===>cv2.boundingRect

 dev_display===>cv2.drawContours & cv2.imshow

        对于算法中的参数,基本上也可以作为参考。当然,这里因为暂时没有找到原来的图片,所以在参数上面稍做了修改。经过这些处理之后,最终获得的opencv代码如下所示,

import numpy as np
import cv2

img = cv2.imread('./audi2.png')

imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret1, img_thresh = cv2.threshold(imgGray, 90, 255, cv2.THRESH_BINARY)

_, contours, hierarchy = cv2.findContours(img_thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

for i,c in enumerate(contours):
	x,y,w,h = cv2.boundingRect(c)
	if w < 10 or w > 60:
		continue
	if h < 40 or h > 150:
		continue
	cv2.drawContours(img, contours, i, (0, 0, 255), 3)
			
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

        利用python命令,直接运行代码,

python demo.py

        不出意外,我们就可以获得这样的运行效果,基本可以满足我们的要求,

以上是关于halcon学习和实践(从halcon转化为opencv)的主要内容,如果未能解决你的问题,请参考以下文章

halcon学习和实践(设备要求)

halcon学习和实践(svm模型训练实战)

halcon学习和实践(hdev脚本学习技巧)

halcon学习和实践(ocr识别)

halcon学习和实践(导出cpp文件)

halcon学习和实践(第一个范例threshold.hdev)