日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

halcon基本,vb,vc连接halcon读取图像,视频

發(fā)布時間:2024/4/14 c/c++ 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 halcon基本,vb,vc连接halcon读取图像,视频 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
halcon學(xué)習(xí)方法:安裝完halcon之后,在開始里出現(xiàn)一些文檔 看完solution_guide_i.pdf就算是入門了,里面講了大部分應(yīng)用的需要的步驟及所用算法

quick_guide.pdf
快速入門halcon
hdevelop_users_guide.pdf
詳細(xì)講解在hdevelop中使用halcon,及hdevelop的操作
programmers_guide.pdf
詳細(xì)講解在高級語言中的使用halcon

reference_hdevelop.pdf
講解各個算子

安裝完halcon會自動添加一個環(huán)境變量%HALCONROOT%,比如指向C:\Program Files\MVTec\HALCON-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, 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.新建一個exe的project,然后保存,然后添加read_image.bas文件到此project

3.2.添加halcon/com控件:選擇project/components,彈出的菜單中

3.3.在工具箱中會出現(xiàn)HWindowXCtrl控件,拖進(jìn)form1,然后再拖一個commandbutton,

雙擊commanbutton,加入代碼

Private Sub Command1_Click() Call Main End Sub3.4.按F5運(yùn)行程序,然后單擊command1,彈出

這是一個halcon界面庫構(gòu)造的窗口,脫離vb窗口的。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用hwindowxctrl的窗口加載圖像
在上面第2步選擇使用導(dǎo)出模板。
導(dǎo)出的代碼如下,可知需要調(diào)用的過程是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中拖入一個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中新建一個工程,文件/新程序
3.選擇助手/打開新的imageaquisition,點(diǎn)擊檢測,會檢測到directshow

觀察連接標(biāo)簽欄里已經(jīng)識別出中微星的攝像頭,可以點(diǎn)擊連接,實(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用于打開攝像頭并配置,此函數(shù)在調(diào)用時會測試要指定的設(shè)備,并鎖定該設(shè)備。之后可以使用grab_image, grab_data, grab_image_async, or grab_data_async獲取圖像,然后處理。使用完之后需要用close_framegrabber釋放,否則別的進(jìn)程無法使用
grab_image采集圖像到Image
close_framegrabber 關(guān)閉設(shè)備
在grab_image (Image, AcqHandle)后面加一句dev_display(Image),把圖像顯示出來
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)用方式很簡單仍然是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

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
需要注意的問題,
在hdevelop中的stop命令導(dǎo)入到vb.bas就變成HDevelopStop

HDevelopStop有兩個版本實(shí)現(xiàn),一個是空函數(shù)(使用halcon窗口導(dǎo)出時),一個是如下(使用導(dǎo)出模板時)
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導(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
新建一個對話框mfc程序(vc2008),添加一個按鈕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)境,對于vc2008
工具/選項/項目解決方案/vc++目錄/包含文件/?? 添加
C:\Program Files\MVTec\HALCON-10.0\include
C:\Program Files\MVTec\HALCON-10.0\include\cpp
工具/選項/項目解決方案/vc++目錄/庫文件/?? 添加
C:\Program Files\MVTec\HALCON-10.0\lib\x86sse2-win32

然后執(zhí)行即可。



vc使用picture control顯示halcon采集的圖像
1.在對話框中添加一個picture control,比如IDC_PIC_HWINDOW
2.在xxdlg.h中添加???
?? ?HTuple m_HWindowID;//picture control經(jīng)過處理之后標(biāo)示符,以后顯示圖像時,直接顯示在m_HWindowID即可。
?? ?HTuple m_FGHandle,m_ImageWidth, m_ImageHeight;//m_FGHandle是視頻設(shè)備
?? ?Hobject m_LiveImage;//從圖片或視頻中抓取圖像到這個變量里面
3.在xxdlg.cpp中添加初始化picture control的函數(shù)。可以在OnInitDialog函數(shù)中調(diào)用之。

// 初始化HALCON顯示窗口 void CabcdDlg::InitHalconWindow(void) {//定義顯示的起點(diǎn)和長寬高HTuple HWindowRow,HWindowColumn,HWindowWidth,HWindowHeight;//定義窗口IDHTuple HWindowID;//定義一個CRect類的對象,用于獲取圖像框的尺寸和位置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);//打開異步采集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读取图像,视频的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。