用MATLAB做图像处理确实方便,函数现成的,调一下就行,看着也直观,适合快速出效果。但一上真项目、对速度有要求的时候就有点顶不住了,毕竟解释型语言跑得慢。所以很多大佬最后还是转VC++,毕竟直接编译运行,效率高。不过纯手写图像处理代码也太折腾了,工作量爆炸。
后来发现了个神器——HALCON,真香!这玩意儿本身功能贼全,HDevelop里拖拖拽拽就能搞算法,开发快,执行也不卡。关键是它还能塞进VC里当库用,不用从零造轮子。把它的函数库接上,底层省一大半时间,又能享受高速性能,简直两全其美。
我自己也在VC下折腾过HALCON,踩过坑也总结了些经验,简单说下怎么配:
1. 先去Link那块加个`halconcpp.lib`;
2. C/C++里的预处理器包含路径加上:`$(HALCONROOT)include` 和 `$(HALCONROOT)includecpp`;
3. Link的Input里把库路径加上:`$(HALCONROOT)libi586-nt`;
4. 最后别忘了在代码里头文件引入:`include HalconCpp.h`
搞定这四步,基本就能用了。之后就可以在VC里直接调HDevelop里面那些函数了。比如常用的emphasize增强图像:
`emphasize(hImage, &hRotateImage, 7, 7, 2.0);`
要注意的是,HDevelop里图像是tuple类型,VC里得转成Hobject才行。灰度图可以用:
`gen_image1(&hImage, byte, WIDTH, HEIGHT, (long)m_pImageBuffer);`
彩图的话先拆通道:
`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, 2.0);`(参数可调)
- 二值化:`bin_threshold(hImage, &hRotateImage);`
- 彩转灰:`rgb1_to_gray(hImage, &hGrayImage);`
一套下来丝滑得很,开发效率和运行速度都在线,推荐搞机器视觉的朋友试试这条路。
后来发现了个神器——HALCON,真香!这玩意儿本身功能贼全,HDevelop里拖拖拽拽就能搞算法,开发快,执行也不卡。关键是它还能塞进VC里当库用,不用从零造轮子。把它的函数库接上,底层省一大半时间,又能享受高速性能,简直两全其美。
我自己也在VC下折腾过HALCON,踩过坑也总结了些经验,简单说下怎么配:
1. 先去Link那块加个`halconcpp.lib`;
2. C/C++里的预处理器包含路径加上:`$(HALCONROOT)include` 和 `$(HALCONROOT)includecpp`;
3. Link的Input里把库路径加上:`$(HALCONROOT)libi586-nt`;
4. 最后别忘了在代码里头文件引入:`include HalconCpp.h`
搞定这四步,基本就能用了。之后就可以在VC里直接调HDevelop里面那些函数了。比如常用的emphasize增强图像:
`emphasize(hImage, &hRotateImage, 7, 7, 2.0);`
要注意的是,HDevelop里图像是tuple类型,VC里得转成Hobject才行。灰度图可以用:
`gen_image1(&hImage, byte, WIDTH, HEIGHT, (long)m_pImageBuffer);`
彩图的话先拆通道:
`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, 2.0);`(参数可调)
- 二值化:`bin_threshold(hImage, &hRotateImage);`
- 彩转灰:`rgb1_to_gray(hImage, &hGrayImage);`
一套下来丝滑得很,开发效率和运行速度都在线,推荐搞机器视觉的朋友试试这条路。