halcon基本,vb,vc连接halcon读取图像,视频
发布时间:2020-12-16 22:33:06 所属栏目:大数据 来源:网络整理
导读:、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 halcon学习方法: 安装完halcon之后,在开始里出现一些文档 看完solution_guide_i.pdf就算是入
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
halcon学习方法:安装完halcon之后,在开始里出现一些文档
看完solution_guide_i.pdf就算是入门了,里面讲了大部分应用的需要的步骤及所用算法
quick_guide.pdf
快速入门halcon
hdevelop_users_guide.pdf
详细讲解在hdevelop中使用halcon,及hdevelop的操作
programmers_guide.pdf
详细讲解在高级语言中的使用halcon
reference_hdevelop.pdf 讲解各个算子 安装完halcon会自动添加一个环境变量%HALCONROOT%,比如指向C:Program FilesMVTecHALCON-10.0 在%HALCONROOT%examples目录下是各种高级语言使用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,Width/2,Height/2,'black',WindowHandle) set_display_font (WindowHandle,14,'mono','true','false') dev_display (Lena) disp_continue_message (WindowHandle,'true') stop ()2.导出vb的bas代码 选择文件/导出,弹出 注意:此处选择使用halcon窗口 3.vb中调用read_image.bas 先看一下read_image.bas的内容,可知在需要的地方直接调用main即可 ... ' Main procedure Private Sub action() ' Local iconic variables Dim ho_Lena As HUntypedObjectX ' Local control variables Dim hv_Width As Variant,hv_Height As Variant Dim hv_WindowHandle As Variant Call Op.ReadImage(ho_Lena,"F:/image/lena.jpg") Call Op.GetImageSize(ho_Lena,hv_Width,hv_Height) If COMExpWinHandleStack.IsOpen() Then Op.CloseWindow (COMExpWinHandleStack.Pop()) End If Call Op.SetWindowAttr("background_color","black") Call Op.OpenWindow(0,Tuple.TupleDiv( _ hv_Width,2),Tuple.TupleDiv(hv_Height,"",hv_WindowHandle) COMExpWinHandleStack.Push (hv_WindowHandle) Call set_display_font(hv_WindowHandle,"mono","true","false") If COMExpWinHandleStack.IsOpen() Then Call Op.DispObj(ho_Lena,COMExpWinHandleStack.GetActive()) End If Call disp_continue_message(hv_WindowHandle,"black","true") HDevelopStop End Sub #If Not NO_EXPORT_APP_MAIN Then Sub InitHalcon() ' Default settings used in HDevelop Call Op.SetSystem("do_low_error","false") End Sub Sub Main() Call InitHalcon Call action End Sub #End If3.1.新建一个exe的project,然后保存,然后添加read_image.bas文件到此project 3.2.添加halcon/com控件:选择project/components,弹出的菜单中 3.3.在工具箱中会出现HWindowXCtrl控件,拖进form1,然后再拖一个commandbutton, 双击commanbutton,加入代码 Private Sub Command1_Click() Call Main End Sub3.4.按F5运行程序,然后单击command1,弹出 这是一个halcon界面库构造的窗口,脱离vb窗口的。 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 vb中使用hwindowxctrl的窗口加载图像 在上面第2步选择使用导出模板。 导出的代码如下,可知需要调用的过程是inithalcon和runhalcon ... ' Main procedure Private Sub action() ' Local iconic variables Dim ho_Lena As HUntypedObjectX ' Local control variables Dim hv_Width As Variant,hv_Height As Variant Dim hv_WindowHandle As Variant Call Op.ReadImage(ho_Lena,hv_Height) 'dev_close_window(...); 'dev_open_window(...); Call set_display_font(hv_ExpDefaultWinHandle,"false") Call Op.DispObj(ho_Lena,hv_ExpDefaultWinHandle) Call disp_continue_message(hv_ExpDefaultWinHandle,"true") HDevelopStop End Sub Sub InitHalcon() ' Default settings used in HDevelop Call Op.SetSystem("do_low_error","false") End Sub Sub RunHalcon(ByRef Window As HWindowX) hv_ExpDefaultWinHandle = Window.HalconID Call action End Sub在上面的3.3中拖入一个commandbutton2,双击添加代码 Private Sub Form_Load() Call InitHalcon End Sub Private Sub Command2_Click() Call RunHalcon(HWindowXCtrl.HalconWindow) End Sub 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 vb中使用hwindowxctrl的窗口加载视频 1.插入摄像头,只要qq视频模块可以使用的摄像头,halcon基本都可以使用吧 2.在halcon中新建一个工程,文件/新程序 3.选择助手/打开新的imageaquisition,点击检测,会检测到directshow 观察连接标签栏里已经识别出中微星的摄像头,可以点击连接,实时查看一下。 颜色空间中可以选择以灰度方式采集图像。 4.选择生成代码标签,如下。同步采集。 选择插入代码,如下 * Code generated by Image Acquisition 01 open_framegrabber ('DirectShow',1,'default',8,'rgb',-1,'false','Vimicro USB PC Camera (ZC030x)',AcqHandle) while (true) grab_image (Image,AcqHandle) * Do something endwhile close_framegrabber (AcqHandle)其中 open_framegrabber用于打开摄像头并配置,此函数在调用时会测试要指定的设备,并锁定该设备。之后可以使用grab_image,grab_data,grab_image_async,or grab_data_async获取图像,然后处理。使用完之后需要用close_framegrabber释放,否则别的进程无法使用 grab_image采集图像到Image close_framegrabber 关闭设备 在grab_image (Image,AcqHandle)后面加一句dev_display(Image),把图像显示出来 5.导出vb代码 如下, ... ' Main procedure Private Sub action() ' Local iconic variables Dim ho_Image As HUntypedObjectX ' Local control variables Dim hv_AcqHandle As Variant 'Code generated by Image Acquisition 01 Call Op.OpenFramegrabber("DirectShow","default","rgb",_ "false","Vimicro USB PC Camera (ZC030x)",hv_AcqHandle) Do While 1 Call 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 If Loop Call Op.CloseFramegrabber(hv_AcqHandle) End Sub Sub InitHalcon() ' Default settings used in HDevelop Call Op.SetSystem("do_low_error","false") End Sub Sub RunHalcon(ByRef Window As HWindowX) hv_ExpDefaultWinHandle = Window.HalconID Call action End Subvb中调用方式很简单仍然是inithalocn和runhalcon 把read_camera.bas加进vb,添加代码 Private Sub Form_Load() Call InitHalcon End Sub Private Sub Command3_Click() Call RunHalcon(HWindowXCtrl.HalconWindow) End Sub 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 需要注意的问题, 在hdevelop中的stop命令导入到vb.bas就变成HDevelopStop HDevelopStop有两个版本实现,一个是空函数(使用halcon窗口导出时),一个是如下(使用导出模板时) Public Sub HDevelopStop() Call MsgBox("Press button to continue",vbYes,"Program stop",1000) End Sub 在采集视频时,程序退出之前需要 close_framegrabber,否则会出错 halcon error#5322:image aquisition:timeout. 此时需要重插一下camera 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 halcon播放avi视频 /******************************************************************/ vc使用halcon 使用hdevelop导出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,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 新建一个对话框mfc程序(vc2008),添加一个按钮button1,加入如下代码(我将action函数稍微改了一下) 当然先要#include "HalconCpp.h" // Main procedure double action( char * p) { using namespace Halcon; // Local iconic variables Hobject image,Region; // Local control variables HTuple Area,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,&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); } 编译程序之前需要先设置一下include和链接环境,对于vc2008 工具/选项/项目解决方案/vc++目录/包含文件/ 添加 C:Program FilesMVTecHALCON-10.0include C:Program FilesMVTecHALCON-10.0includecpp 工具/选项/项目解决方案/vc++目录/库文件/ 添加 C:Program FilesMVTecHALCON-10.0libx86sse2-win32 然后执行即可。 vc使用picture control显示halcon采集的图像 1.在对话框中添加一个picture control,比如IDC_PIC_HWINDOW 2.在xxdlg.h中添加 HTuple m_HWindowID;//picture control经过处理之后标示符,以后显示图像时,直接显示在m_HWindowID即可。 HTuple m_FGHandle,m_ImageWidth,m_ImageHeight;//m_FGHandle是视频设备 Hobject m_LiveImage;//从图片或视频中抓取图像到这个变量里面 3.在xxdlg.cpp中添加初始化picture control的函数。可以在OnInitDialog函数中调用之。 // 初始化HALCON显示窗口 void CabcdDlg::InitHalconWindow(void) { //定义显示的起点和长宽高 HTuple HWindowRow,HWindowColumn,HWindowWidth,HWindowHeight; //定义窗口ID HTuple HWindowID; //定义一个CRect类的对象,用于获取图像框的尺寸和位置 CRect Rect; CWnd *pWnd = GetDlgItem(IDC_PIC_HWINDOW); CDC *pDC = pWnd->GetDC(); pWnd->GetWindowRect(&Rect); //设置显示窗口的起点和宽高 HWindowRow = 0; HWindowColumn = 0; HWindowWidth = Rect.Width(); HWindowHeight = Rect.Height(); //设定固定的窗口大小,而不是根据控件大小设定 //GetDlgItem(IDC_PIC_HWINDOW)->SetWindowPos(NULL,322,242,SWP_NOZORDER | SWP_NOMOVE); try { set_window_attr("border_width",0); HWindowID = (Hlong)pWnd->m_hWnd; open_window(HWindowRow,HWindowHeight,HWindowID,"visible",&m_HWindowID); set_draw(m_HWindowID,"margin");//设置显示模式是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","false","USB 视频设备",&m_FGHandle); open_framegrabber ("DirectShow",&m_FGHandle); //打开异步采集 grab_image_start (m_FGHandle,-1); while (1) { grab_image_async(&m_LiveImage,m_FGHandle,-1);//采集一副图像 get_image_pointer1(m_LiveImage,NULL,&m_ImageWidth,&m_ImageHeight);//得到图像的宽高和指针 set_part(m_HWindowID,m_ImageHeight - 1,m_ImageWidth -1);//使图像显示适应窗口大小 disp_obj(m_LiveImage,m_HWindowID); //窗口中显示图像 } close_framegrabber(m_FGHandle); } catch (HException& except) { TRACE(except.message); }源码 halcon 显示图像 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |