用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);`
一套下來絲滑得很,開發效率和運行速度都在線,推薦搞機器視覺的朋友試試這條路。