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)的主要内容,如果未能解决你的问题,请参考以下文章