halcon基本,vb,vc连接halcon读取图像,视频
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                halcon基本,vb,vc连接halcon读取图像,视频
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                
                            
                            
                            、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
halcon學(xué)習(xí)方法:安裝完halcon之后,在開(kāi)始里出現(xiàn)一些文檔 看完solution_guide_i.pdf就算是入門了,里面講了大部分應(yīng)用的需要的步驟及所用算法
quick_guide.pdf
快速入門halcon
hdevelop_users_guide.pdf
詳細(xì)講解在hdevelop中使用halcon,及hdevelop的操作
programmers_guide.pdf
詳細(xì)講解在高級(jí)語(yǔ)言中的使用halcon
reference_hdevelop.pdf
講解各個(gè)算子
安裝完halcon會(huì)自動(dòng)添加一個(gè)環(huán)境變量%HALCONROOT%,比如指向C:\Program Files\MVTec\HALCON-10.0
在%HALCONROOT%\examples目錄下是各種高級(jí)語(yǔ)言使用halcon的源碼例子
http://blog.csdn.net/wgluser/article/category/1183275
http://blog.sina.com.cn/s/articlelist_1143733774_0_1.html
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用halcon窗口加載圖像
1.讀取圖像
read_image (Lena, 'F:/image/lena.jpg') get_image_size (Lena, Width, Height) dev_close_window () dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle) set_display_font (WindowHandle, 14, 'mono', 'true', 'false') dev_display (Lena) disp_continue_message (WindowHandle, 'black', 'true') stop ()2.導(dǎo)出vb的bas代碼
選擇文件/導(dǎo)出,彈出
注意:此處選擇使用halcon窗口
3.vb中調(diào)用read_image.bas
先看一下read_image.bas的內(nèi)容,可知在需要的地方直接調(diào)用main即可
...' Main procedure Private Sub action()' Local iconic variablesDim ho_Lena As HUntypedObjectX' Local control variablesDim hv_Width As Variant, hv_Height As VariantDim hv_WindowHandle As VariantCall Op.ReadImage(ho_Lena, "F:/image/lena.jpg")Call Op.GetImageSize(ho_Lena, hv_Width, hv_Height)If COMExpWinHandleStack.IsOpen() ThenOp.CloseWindow (COMExpWinHandleStack.Pop())End IfCall Op.SetWindowAttr("background_color", "black")Call Op.OpenWindow(0, 0, Tuple.TupleDiv( _hv_Width, 2), Tuple.TupleDiv(hv_Height, 2), 0, "", "", hv_WindowHandle)COMExpWinHandleStack.Push (hv_WindowHandle)Call set_display_font(hv_WindowHandle, 14, "mono", "true", "false")If COMExpWinHandleStack.IsOpen() ThenCall Op.DispObj(ho_Lena, COMExpWinHandleStack.GetActive())End IfCall disp_continue_message(hv_WindowHandle, "black", "true")HDevelopStop End Sub#If Not NO_EXPORT_APP_MAIN Then Sub InitHalcon()' Default settings used in HDevelopCall Op.SetSystem("do_low_error", "false") End SubSub Main()Call InitHalconCall action End Sub#End If3.1.新建一個(gè)exe的project,然后保存,然后添加read_image.bas文件到此project
3.2.添加halcon/com控件:選擇project/components,彈出的菜單中
3.3.在工具箱中會(huì)出現(xiàn)HWindowXCtrl控件,拖進(jìn)form1,然后再拖一個(gè)commandbutton,
雙擊commanbutton,加入代碼
Private Sub Command1_Click() Call Main End Sub3.4.按F5運(yùn)行程序,然后單擊command1,彈出
這是一個(gè)halcon界面庫(kù)構(gòu)造的窗口,脫離vb窗口的。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用hwindowxctrl的窗口加載圖像
在上面第2步選擇使用導(dǎo)出模板。
導(dǎo)出的代碼如下,可知需要調(diào)用的過(guò)程是inithalcon和runhalcon
... ' Main procedure Private Sub action()' Local iconic variablesDim ho_Lena As HUntypedObjectX' Local control variablesDim hv_Width As Variant, hv_Height As VariantDim hv_WindowHandle As VariantCall Op.ReadImage(ho_Lena, "F:/image/lena.jpg")Call Op.GetImageSize(ho_Lena, hv_Width, hv_Height)'dev_close_window(...);'dev_open_window(...);Call set_display_font(hv_ExpDefaultWinHandle, 14, "mono", "true", "false")Call Op.DispObj(ho_Lena, hv_ExpDefaultWinHandle)Call disp_continue_message(hv_ExpDefaultWinHandle, "black", "true")HDevelopStop End SubSub InitHalcon()' Default settings used in HDevelopCall Op.SetSystem("do_low_error", "false") End SubSub RunHalcon(ByRef Window As HWindowX)hv_ExpDefaultWinHandle = Window.HalconIDCall action End Sub在上面的3.3中拖入一個(gè)commandbutton2,雙擊添加代碼
Private Sub Form_Load()Call InitHalcon End SubPrivate Sub Command2_Click() Call RunHalcon(HWindowXCtrl.HalconWindow) End Sub
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用hwindowxctrl的窗口加載視頻
1.插入攝像頭,只要qq視頻模塊可以使用的攝像頭,halcon基本都可以使用吧
2.在halcon中新建一個(gè)工程,文件/新程序
3.選擇助手/打開(kāi)新的imageaquisition,點(diǎn)擊檢測(cè),會(huì)檢測(cè)到directshow
觀察連接標(biāo)簽欄里已經(jīng)識(shí)別出中微星的攝像頭,可以點(diǎn)擊連接,實(shí)時(shí)查看一下。
顏色空間中可以選擇以灰度方式采集圖像。
4.選擇生成代碼標(biāo)簽,如下。同步采集。
選擇插入代碼,如下
* Code generated by Image Acquisition 01 open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'Vimicro USB PC Camera (ZC030x)', 0, -1, AcqHandle) while (true)grab_image (Image, AcqHandle)* Do something endwhile close_framegrabber (AcqHandle)其中
open_framegrabber用于打開(kāi)攝像頭并配置,此函數(shù)在調(diào)用時(shí)會(huì)測(cè)試要指定的設(shè)備,并鎖定該設(shè)備。之后可以使用grab_image, grab_data, grab_image_async, or grab_data_async獲取圖像,然后處理。使用完之后需要用close_framegrabber釋放,否則別的進(jìn)程無(wú)法使用
grab_image采集圖像到Image
close_framegrabber 關(guān)閉設(shè)備
在grab_image (Image, AcqHandle)后面加一句dev_display(Image),把圖像顯示出來(lái)
5.導(dǎo)出vb代碼
如下,
... ' Main procedure Private Sub action()' Local iconic variablesDim ho_Image As HUntypedObjectX' Local control variablesDim hv_AcqHandle As Variant'Code generated by Image Acquisition 01Call Op.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, _"false", "default", "Vimicro USB PC Camera (ZC030x)", 0, -1, hv_AcqHandle)Do While 1Call Op.GrabImage(ho_Image, hv_AcqHandle)Call Op.DispObj(ho_Image, hv_ExpDefaultWinHandle)'Do something#If USE_DO_EVENTS Then' Please note: The call of DoEvents() is only a hack to' enable VB to react on events. Please change the code' so that it can handle events in a standard way.DoEvents#End IfLoopCall Op.CloseFramegrabber(hv_AcqHandle) End SubSub InitHalcon()' Default settings used in HDevelopCall Op.SetSystem("do_low_error", "false") End SubSub RunHalcon(ByRef Window As HWindowX)hv_ExpDefaultWinHandle = Window.HalconIDCall action End Subvb中調(diào)用方式很簡(jiǎn)單仍然是inithalocn和runhalcon
把read_camera.bas加進(jìn)vb,添加代碼
Private Sub Form_Load()Call InitHalcon End SubPrivate Sub Command3_Click() Call RunHalcon(HWindowXCtrl.HalconWindow) End Sub
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
需要注意的問(wèn)題,
在hdevelop中的stop命令導(dǎo)入到vb.bas就變成HDevelopStop
HDevelopStop有兩個(gè)版本實(shí)現(xiàn),一個(gè)是空函數(shù)(使用halcon窗口導(dǎo)出時(shí)),一個(gè)是如下(使用導(dǎo)出模板時(shí))
Public Sub HDevelopStop()Call MsgBox("Press button to continue", vbYes, "Program stop", "", 1000) End Sub
在采集視頻時(shí),程序退出之前需要close_framegrabber,否則會(huì)出錯(cuò)
halcon error#5322:image aquisition:timeout.
此時(shí)需要重插一下camera
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
halcon播放avi視頻
/******************************************************************/
vc使用halcon
使用hdevelop導(dǎo)出halcon程序的c++代碼之后,比如
read_image (image, 'C:/Documents and Settings/Administrator/桌面/vision/IMG_20121015_091436.bmp') rgb1_to_gray (image, GrayImage) dev_set_color('blue') *bin_threshold (GrayImage, Region) threshold(GrayImage,Region,100,255) area_center (Region, Area, Row, Column)生成c++代碼
/// // File generated by HDevelop for HALCON/C++ Version 10.0 ///#include "HalconCpp.h"using namespace Halcon;#ifndef NO_EXPORT_MAIN // Main procedure void action() {using namespace Halcon;// Local iconic variables Hobject image, GrayImage, Region;// Local control variables HTuple Area, Row, Column;read_image(&image, "C:/Documents and Settings/Administrator/桌面/vision/IMG_20121015_091436.bmp");rgb1_to_gray(image, &GrayImage);if (HDevWindowStack::IsOpen())set_color(HDevWindowStack::GetActive(),"blue");bin_threshold(GrayImage, &Region);area_center(Region, &Area, &Row, &Column);}#ifndef NO_EXPORT_APP_MAIN int main(int argc, char *argv[]) {using namespace Halcon;// Default settings used in HDevelop (can be omitted) set_system("do_low_error","false");action();return 0; } #endif#endif
新建一個(gè)對(duì)話框mfc程序(vc2008),添加一個(gè)按鈕button1,加入如下代碼(我將action函數(shù)稍微改了一下)
當(dāng)然先要#include "HalconCpp.h"
// Main procedure double action( char * p) {using namespace Halcon;// Local iconic variables Hobject image, GrayImage, Region;// Local control variables HTuple Area, Row, Column;read_image(&image, p);rgb1_to_gray(image, &GrayImage);if (HDevWindowStack::IsOpen())set_color(HDevWindowStack::GetActive(),"blue");//bin_threshold(GrayImage, &Region);threshold(GrayImage, &Region,50,255);area_center(Region, &Area, &Row, &Column);double d=Area[0];return d;}void CabcDlg::OnBnClickedButton1() {// TODO: 在此添加控件通知處理程序代碼double d=action("C:/Documents and Settings/Administrator/桌面/vision/IMG_20121015_091436.bmp");CString str;str.Format("%f",d);AfxMessageBox(str); }
編譯程序之前需要先設(shè)置一下include和鏈接環(huán)境,對(duì)于vc2008
工具/選項(xiàng)/項(xiàng)目解決方案/vc++目錄/包含文件/?? 添加
C:\Program Files\MVTec\HALCON-10.0\include
C:\Program Files\MVTec\HALCON-10.0\include\cpp
工具/選項(xiàng)/項(xiàng)目解決方案/vc++目錄/庫(kù)文件/?? 添加
C:\Program Files\MVTec\HALCON-10.0\lib\x86sse2-win32
然后執(zhí)行即可。
vc使用picture control顯示halcon采集的圖像
1.在對(duì)話框中添加一個(gè)picture control,比如IDC_PIC_HWINDOW
2.在xxdlg.h中添加???
?? ?HTuple m_HWindowID;//picture control經(jīng)過(guò)處理之后標(biāo)示符,以后顯示圖像時(shí),直接顯示在m_HWindowID即可。
?? ?HTuple m_FGHandle,m_ImageWidth, m_ImageHeight;//m_FGHandle是視頻設(shè)備
?? ?Hobject m_LiveImage;//從圖片或視頻中抓取圖像到這個(gè)變量里面
3.在xxdlg.cpp中添加初始化picture control的函數(shù)??梢栽贠nInitDialog函數(shù)中調(diào)用之。
// 初始化HALCON顯示窗口 void CabcdDlg::InitHalconWindow(void) {//定義顯示的起點(diǎn)和長(zhǎng)寬高HTuple HWindowRow,HWindowColumn,HWindowWidth,HWindowHeight;//定義窗口IDHTuple HWindowID;//定義一個(gè)CRect類的對(duì)象,用于獲取圖像框的尺寸和位置CRect Rect;CWnd *pWnd = GetDlgItem(IDC_PIC_HWINDOW);CDC *pDC = pWnd->GetDC();pWnd->GetWindowRect(&Rect);//設(shè)置顯示窗口的起點(diǎn)和寬高HWindowRow = 0;HWindowColumn = 0;HWindowWidth = Rect.Width();HWindowHeight = Rect.Height();//設(shè)定固定的窗口大小,而不是根據(jù)控件大小設(shè)定//GetDlgItem(IDC_PIC_HWINDOW)->SetWindowPos(NULL,0,0,322,242,SWP_NOZORDER | SWP_NOMOVE);try{set_window_attr("border_width",0);HWindowID = (Hlong)pWnd->m_hWnd;open_window(HWindowRow,HWindowColumn,HWindowWidth,HWindowHeight,HWindowID,"visible","",&m_HWindowID);set_draw(m_HWindowID,"margin");//設(shè)置顯示模式是margin(邊緣)}catch (HException& except){TRACE(except.message);} }
如果要顯示圖像,
read_image(&m_LiveImage, "C:/Documents and Settings/Administrator/桌面/164226715_126870_3.jpg");disp_obj(m_LiveImage, m_HWindowID);
如果要顯示視頻
??? try{//open_framegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "USB 視頻設(shè)備", 0, -1, &m_FGHandle);open_framegrabber ("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "Vimicro USB PC Camera (ZC030x)", 0, -1, &m_FGHandle);//打開(kāi)異步采集grab_image_start (m_FGHandle, -1);while (1){grab_image_async(&m_LiveImage, m_FGHandle, -1);//采集一副圖像get_image_pointer1(m_LiveImage, NULL, NULL, &m_ImageWidth, &m_ImageHeight);//得到圖像的寬高和指針set_part(m_HWindowID, 0, 0, m_ImageHeight - 1, m_ImageWidth -1);//使圖像顯示適應(yīng)窗口大小disp_obj(m_LiveImage, m_HWindowID);?? ?//窗口中顯示圖像}close_framegrabber(m_FGHandle);}catch (HException& except){TRACE(except.message);}源碼? halcon 顯示圖像
 
                        
                        
                        halcon學(xué)習(xí)方法:安裝完halcon之后,在開(kāi)始里出現(xiàn)一些文檔 看完solution_guide_i.pdf就算是入門了,里面講了大部分應(yīng)用的需要的步驟及所用算法
quick_guide.pdf
快速入門halcon
hdevelop_users_guide.pdf
詳細(xì)講解在hdevelop中使用halcon,及hdevelop的操作
programmers_guide.pdf
詳細(xì)講解在高級(jí)語(yǔ)言中的使用halcon
reference_hdevelop.pdf
講解各個(gè)算子
安裝完halcon會(huì)自動(dòng)添加一個(gè)環(huán)境變量%HALCONROOT%,比如指向C:\Program Files\MVTec\HALCON-10.0
在%HALCONROOT%\examples目錄下是各種高級(jí)語(yǔ)言使用halcon的源碼例子
http://blog.csdn.net/wgluser/article/category/1183275
http://blog.sina.com.cn/s/articlelist_1143733774_0_1.html
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用halcon窗口加載圖像
1.讀取圖像
read_image (Lena, 'F:/image/lena.jpg') get_image_size (Lena, Width, Height) dev_close_window () dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle) set_display_font (WindowHandle, 14, 'mono', 'true', 'false') dev_display (Lena) disp_continue_message (WindowHandle, 'black', 'true') stop ()2.導(dǎo)出vb的bas代碼
選擇文件/導(dǎo)出,彈出
注意:此處選擇使用halcon窗口
3.vb中調(diào)用read_image.bas
先看一下read_image.bas的內(nèi)容,可知在需要的地方直接調(diào)用main即可
...' Main procedure Private Sub action()' Local iconic variablesDim ho_Lena As HUntypedObjectX' Local control variablesDim hv_Width As Variant, hv_Height As VariantDim hv_WindowHandle As VariantCall Op.ReadImage(ho_Lena, "F:/image/lena.jpg")Call Op.GetImageSize(ho_Lena, hv_Width, hv_Height)If COMExpWinHandleStack.IsOpen() ThenOp.CloseWindow (COMExpWinHandleStack.Pop())End IfCall Op.SetWindowAttr("background_color", "black")Call Op.OpenWindow(0, 0, Tuple.TupleDiv( _hv_Width, 2), Tuple.TupleDiv(hv_Height, 2), 0, "", "", hv_WindowHandle)COMExpWinHandleStack.Push (hv_WindowHandle)Call set_display_font(hv_WindowHandle, 14, "mono", "true", "false")If COMExpWinHandleStack.IsOpen() ThenCall Op.DispObj(ho_Lena, COMExpWinHandleStack.GetActive())End IfCall disp_continue_message(hv_WindowHandle, "black", "true")HDevelopStop End Sub#If Not NO_EXPORT_APP_MAIN Then Sub InitHalcon()' Default settings used in HDevelopCall Op.SetSystem("do_low_error", "false") End SubSub Main()Call InitHalconCall action End Sub#End If3.1.新建一個(gè)exe的project,然后保存,然后添加read_image.bas文件到此project
3.2.添加halcon/com控件:選擇project/components,彈出的菜單中
3.3.在工具箱中會(huì)出現(xiàn)HWindowXCtrl控件,拖進(jìn)form1,然后再拖一個(gè)commandbutton,
雙擊commanbutton,加入代碼
Private Sub Command1_Click() Call Main End Sub3.4.按F5運(yùn)行程序,然后單擊command1,彈出
這是一個(gè)halcon界面庫(kù)構(gòu)造的窗口,脫離vb窗口的。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用hwindowxctrl的窗口加載圖像
在上面第2步選擇使用導(dǎo)出模板。
導(dǎo)出的代碼如下,可知需要調(diào)用的過(guò)程是inithalcon和runhalcon
... ' Main procedure Private Sub action()' Local iconic variablesDim ho_Lena As HUntypedObjectX' Local control variablesDim hv_Width As Variant, hv_Height As VariantDim hv_WindowHandle As VariantCall Op.ReadImage(ho_Lena, "F:/image/lena.jpg")Call Op.GetImageSize(ho_Lena, hv_Width, hv_Height)'dev_close_window(...);'dev_open_window(...);Call set_display_font(hv_ExpDefaultWinHandle, 14, "mono", "true", "false")Call Op.DispObj(ho_Lena, hv_ExpDefaultWinHandle)Call disp_continue_message(hv_ExpDefaultWinHandle, "black", "true")HDevelopStop End SubSub InitHalcon()' Default settings used in HDevelopCall Op.SetSystem("do_low_error", "false") End SubSub RunHalcon(ByRef Window As HWindowX)hv_ExpDefaultWinHandle = Window.HalconIDCall action End Sub在上面的3.3中拖入一個(gè)commandbutton2,雙擊添加代碼
Private Sub Form_Load()Call InitHalcon End SubPrivate Sub Command2_Click() Call RunHalcon(HWindowXCtrl.HalconWindow) End Sub
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用hwindowxctrl的窗口加載視頻
1.插入攝像頭,只要qq視頻模塊可以使用的攝像頭,halcon基本都可以使用吧
2.在halcon中新建一個(gè)工程,文件/新程序
3.選擇助手/打開(kāi)新的imageaquisition,點(diǎn)擊檢測(cè),會(huì)檢測(cè)到directshow
觀察連接標(biāo)簽欄里已經(jīng)識(shí)別出中微星的攝像頭,可以點(diǎn)擊連接,實(shí)時(shí)查看一下。
顏色空間中可以選擇以灰度方式采集圖像。
4.選擇生成代碼標(biāo)簽,如下。同步采集。
選擇插入代碼,如下
* Code generated by Image Acquisition 01 open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'Vimicro USB PC Camera (ZC030x)', 0, -1, AcqHandle) while (true)grab_image (Image, AcqHandle)* Do something endwhile close_framegrabber (AcqHandle)其中
open_framegrabber用于打開(kāi)攝像頭并配置,此函數(shù)在調(diào)用時(shí)會(huì)測(cè)試要指定的設(shè)備,并鎖定該設(shè)備。之后可以使用grab_image, grab_data, grab_image_async, or grab_data_async獲取圖像,然后處理。使用完之后需要用close_framegrabber釋放,否則別的進(jìn)程無(wú)法使用
grab_image采集圖像到Image
close_framegrabber 關(guān)閉設(shè)備
在grab_image (Image, AcqHandle)后面加一句dev_display(Image),把圖像顯示出來(lái)
5.導(dǎo)出vb代碼
如下,
... ' Main procedure Private Sub action()' Local iconic variablesDim ho_Image As HUntypedObjectX' Local control variablesDim hv_AcqHandle As Variant'Code generated by Image Acquisition 01Call Op.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, _"false", "default", "Vimicro USB PC Camera (ZC030x)", 0, -1, hv_AcqHandle)Do While 1Call Op.GrabImage(ho_Image, hv_AcqHandle)Call Op.DispObj(ho_Image, hv_ExpDefaultWinHandle)'Do something#If USE_DO_EVENTS Then' Please note: The call of DoEvents() is only a hack to' enable VB to react on events. Please change the code' so that it can handle events in a standard way.DoEvents#End IfLoopCall Op.CloseFramegrabber(hv_AcqHandle) End SubSub InitHalcon()' Default settings used in HDevelopCall Op.SetSystem("do_low_error", "false") End SubSub RunHalcon(ByRef Window As HWindowX)hv_ExpDefaultWinHandle = Window.HalconIDCall action End Subvb中調(diào)用方式很簡(jiǎn)單仍然是inithalocn和runhalcon
把read_camera.bas加進(jìn)vb,添加代碼
Private Sub Form_Load()Call InitHalcon End SubPrivate Sub Command3_Click() Call RunHalcon(HWindowXCtrl.HalconWindow) End Sub
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
需要注意的問(wèn)題,
在hdevelop中的stop命令導(dǎo)入到vb.bas就變成HDevelopStop
HDevelopStop有兩個(gè)版本實(shí)現(xiàn),一個(gè)是空函數(shù)(使用halcon窗口導(dǎo)出時(shí)),一個(gè)是如下(使用導(dǎo)出模板時(shí))
Public Sub HDevelopStop()Call MsgBox("Press button to continue", vbYes, "Program stop", "", 1000) End Sub
在采集視頻時(shí),程序退出之前需要close_framegrabber,否則會(huì)出錯(cuò)
halcon error#5322:image aquisition:timeout.
此時(shí)需要重插一下camera
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
halcon播放avi視頻
/******************************************************************/
vc使用halcon
使用hdevelop導(dǎo)出halcon程序的c++代碼之后,比如
read_image (image, 'C:/Documents and Settings/Administrator/桌面/vision/IMG_20121015_091436.bmp') rgb1_to_gray (image, GrayImage) dev_set_color('blue') *bin_threshold (GrayImage, Region) threshold(GrayImage,Region,100,255) area_center (Region, Area, Row, Column)生成c++代碼
/// // File generated by HDevelop for HALCON/C++ Version 10.0 ///#include "HalconCpp.h"using namespace Halcon;#ifndef NO_EXPORT_MAIN // Main procedure void action() {using namespace Halcon;// Local iconic variables Hobject image, GrayImage, Region;// Local control variables HTuple Area, Row, Column;read_image(&image, "C:/Documents and Settings/Administrator/桌面/vision/IMG_20121015_091436.bmp");rgb1_to_gray(image, &GrayImage);if (HDevWindowStack::IsOpen())set_color(HDevWindowStack::GetActive(),"blue");bin_threshold(GrayImage, &Region);area_center(Region, &Area, &Row, &Column);}#ifndef NO_EXPORT_APP_MAIN int main(int argc, char *argv[]) {using namespace Halcon;// Default settings used in HDevelop (can be omitted) set_system("do_low_error","false");action();return 0; } #endif#endif
新建一個(gè)對(duì)話框mfc程序(vc2008),添加一個(gè)按鈕button1,加入如下代碼(我將action函數(shù)稍微改了一下)
當(dāng)然先要#include "HalconCpp.h"
// Main procedure double action( char * p) {using namespace Halcon;// Local iconic variables Hobject image, GrayImage, Region;// Local control variables HTuple Area, Row, Column;read_image(&image, p);rgb1_to_gray(image, &GrayImage);if (HDevWindowStack::IsOpen())set_color(HDevWindowStack::GetActive(),"blue");//bin_threshold(GrayImage, &Region);threshold(GrayImage, &Region,50,255);area_center(Region, &Area, &Row, &Column);double d=Area[0];return d;}void CabcDlg::OnBnClickedButton1() {// TODO: 在此添加控件通知處理程序代碼double d=action("C:/Documents and Settings/Administrator/桌面/vision/IMG_20121015_091436.bmp");CString str;str.Format("%f",d);AfxMessageBox(str); }
編譯程序之前需要先設(shè)置一下include和鏈接環(huán)境,對(duì)于vc2008
工具/選項(xiàng)/項(xiàng)目解決方案/vc++目錄/包含文件/?? 添加
C:\Program Files\MVTec\HALCON-10.0\include
C:\Program Files\MVTec\HALCON-10.0\include\cpp
工具/選項(xiàng)/項(xiàng)目解決方案/vc++目錄/庫(kù)文件/?? 添加
C:\Program Files\MVTec\HALCON-10.0\lib\x86sse2-win32
然后執(zhí)行即可。
vc使用picture control顯示halcon采集的圖像
1.在對(duì)話框中添加一個(gè)picture control,比如IDC_PIC_HWINDOW
2.在xxdlg.h中添加???
?? ?HTuple m_HWindowID;//picture control經(jīng)過(guò)處理之后標(biāo)示符,以后顯示圖像時(shí),直接顯示在m_HWindowID即可。
?? ?HTuple m_FGHandle,m_ImageWidth, m_ImageHeight;//m_FGHandle是視頻設(shè)備
?? ?Hobject m_LiveImage;//從圖片或視頻中抓取圖像到這個(gè)變量里面
3.在xxdlg.cpp中添加初始化picture control的函數(shù)??梢栽贠nInitDialog函數(shù)中調(diào)用之。
// 初始化HALCON顯示窗口 void CabcdDlg::InitHalconWindow(void) {//定義顯示的起點(diǎn)和長(zhǎng)寬高HTuple HWindowRow,HWindowColumn,HWindowWidth,HWindowHeight;//定義窗口IDHTuple HWindowID;//定義一個(gè)CRect類的對(duì)象,用于獲取圖像框的尺寸和位置CRect Rect;CWnd *pWnd = GetDlgItem(IDC_PIC_HWINDOW);CDC *pDC = pWnd->GetDC();pWnd->GetWindowRect(&Rect);//設(shè)置顯示窗口的起點(diǎn)和寬高HWindowRow = 0;HWindowColumn = 0;HWindowWidth = Rect.Width();HWindowHeight = Rect.Height();//設(shè)定固定的窗口大小,而不是根據(jù)控件大小設(shè)定//GetDlgItem(IDC_PIC_HWINDOW)->SetWindowPos(NULL,0,0,322,242,SWP_NOZORDER | SWP_NOMOVE);try{set_window_attr("border_width",0);HWindowID = (Hlong)pWnd->m_hWnd;open_window(HWindowRow,HWindowColumn,HWindowWidth,HWindowHeight,HWindowID,"visible","",&m_HWindowID);set_draw(m_HWindowID,"margin");//設(shè)置顯示模式是margin(邊緣)}catch (HException& except){TRACE(except.message);} }
如果要顯示圖像,
read_image(&m_LiveImage, "C:/Documents and Settings/Administrator/桌面/164226715_126870_3.jpg");disp_obj(m_LiveImage, m_HWindowID);
如果要顯示視頻
??? try{//open_framegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "USB 視頻設(shè)備", 0, -1, &m_FGHandle);open_framegrabber ("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "Vimicro USB PC Camera (ZC030x)", 0, -1, &m_FGHandle);//打開(kāi)異步采集grab_image_start (m_FGHandle, -1);while (1){grab_image_async(&m_LiveImage, m_FGHandle, -1);//采集一副圖像get_image_pointer1(m_LiveImage, NULL, NULL, &m_ImageWidth, &m_ImageHeight);//得到圖像的寬高和指針set_part(m_HWindowID, 0, 0, m_ImageHeight - 1, m_ImageWidth -1);//使圖像顯示適應(yīng)窗口大小disp_obj(m_LiveImage, m_HWindowID);?? ?//窗口中顯示圖像}close_framegrabber(m_FGHandle);}catch (HException& except){TRACE(except.message);}源碼? halcon 顯示圖像
轉(zhuǎn)載于:https://www.cnblogs.com/-song/archive/2012/03/29/3331878.html
總結(jié)
以上是生活随笔為你收集整理的halcon基本,vb,vc连接halcon读取图像,视频的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 如何在Jsp上传图片
- 下一篇: HTML5+CSS3构建同页面表单间的动
