1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Halcon 进阶 四 C# 实现 Halcon与迈德威视 视觉解析二维码

Halcon 进阶 四 C# 实现 Halcon与迈德威视 视觉解析二维码

时间:2018-08-06 19:51:37

相关推荐

Halcon 进阶 四 C# 实现 Halcon与迈德威视 视觉解析二维码

Halcon 进阶 四 C# 实现 Halcon与迈德威视,视觉解析二维码

图像结果设备操作初始化相机设置图像处理注意事项

halcon解析二维码

适合各行业 二维码数据采集、关联项目、质量追溯项目。

例如:

快销品行业,瓶盖内、外、瓶身二维码三码同步关联;瓶、盒、箱、托盘多级关联。

图像结果

设备操作

初始化

全局变量

#region Cameraprotected IntPtr m_Grabber = IntPtr.Zero;protected CameraHandle m_hCamera = 0;protected tSdkCameraDevInfo[] m_DevInfo;protected pfnCameraGrabberFrameListener m_FrameListener;protected pfnCameraGrabberSaveImageComplete m_SaveImageComplete;Data_Code_Reader code_Reader_Out;#endregion

连接设备

这里面用到了 h_out_window(halcon控件) 和

DispWnd1(PictureBox控件),没做区分,解码显示在h_out_window

public void Init_Device(){// 初始化 halcon,code_Reader_Out = new Data_Code_Reader(){Time_Out = 50,};h_out_window.ImagePart = new Rectangle(0, 0, HY.Base.BaseSetting.Decode_Set.Out_Width, HY.Base.BaseSetting.Decode_Set.Out_Height);code_Reader_Out.Open_Window(h_out_window.HalconWindow);m_FrameListener = new pfnCameraGrabberFrameListener(CameraGrabberFrameListener);m_SaveImageComplete = new pfnCameraGrabberSaveImageComplete(CameraGrabberSaveImageComplete);MvApi.CameraEnumerateDevice(out m_DevInfo);if (m_DevInfo != null && m_DevInfo.Count() > 0){if (MvApi.CameraGrabber_Create(out m_Grabber, ref m_DevInfo[0]) == CameraSdkStatus.CAMERA_STATUS_SUCCESS){MvApi.CameraGrabber_GetCameraHandle(m_Grabber, out m_hCamera);MvApi.CameraCreateSettingPage(m_hCamera, this.Handle, m_DevInfo[0].acFriendlyName, null, (IntPtr)0, 0);MvApi.CameraGrabber_SetFrameListener(m_Grabber, m_FrameListener, IntPtr.Zero);MvApi.CameraGrabber_SetSaveImageCompleteCallback(m_Grabber, m_SaveImageComplete, IntPtr.Zero);MvApi.CameraGrabber_SetHWnd(m_Grabber, DispWnd1.Handle);return;}else{CloseEQ();ShowLog("设备初始化失败", EnumClass.ShowLogColor.Error);}}else{CloseEQ();ShowLog("设备初始化失败", EnumClass.ShowLogColor.Error);return;}}

相机设置

#region 相机private void buttonSettings_Click(object sender, EventArgs e){if (m_Grabber != IntPtr.Zero)MvApi.CameraShowSettingPage(m_hCamera, 1);}//抓图private void buttonSnap_Click(object sender, EventArgs e){if (m_Grabber != IntPtr.Zero)MvApi.CameraGrabber_SaveImageAsync(m_Grabber);}//播放private void buttonPlay_Click(object sender, EventArgs e){if (m_Grabber != IntPtr.Zero)MvApi.CameraGrabber_StartLive(m_Grabber);}//停止private void buttonStop_Click(object sender, EventArgs e){if (m_Grabber != IntPtr.Zero)MvApi.CameraGrabber_StopLive(m_Grabber);}#endregion

图像处理

// 每当Grabber捕获到一帧图像时,会分3个阶段来依次调用FrameListener// 如果FrameListener返回0,Grabber将会丢弃此帧并结束针对此帧的所有后续处理阶段// 阶段0: RAW数据处理,pFrameBuffer=Raw数据// 阶段1: 截图前处理,pFrameBuffer=RGB数据// 阶段2: 显示前处理,pFrameBuffer=RGB数据private int CameraGrabberFrameListener(IntPtr Grabber, int Phase, IntPtr pFrameBuffer, ref tSdkFrameHead pFrameHead, IntPtr Context){if (Phase == 0){// RAW数据处理,pFrameBuffer=Raw数据}else if (Phase == 1){// 截图前处理,pFrameBuffer=RGB数据}else if (Phase == 2){GC.Collect();//强制进行即时垃圾回收,防止内存溢出int w = pFrameHead.iWidth;int h = pFrameHead.iHeight;Boolean gray = (pFrameHead.uiMediaType ==(uint)emImageFormat.CAMERA_MEDIA_TYPE_MONO8);//MvApi.CameraGrabber_SaveImageAsync(m_Grabber[0]);// 显示前处理,pFrameBuffer=RGB数据HObject himage;string time = "0";string decode_str = "";HOperatorSet.GenImageInterleaved(out himage, pFrameBuffer, "bgr", w, h, -1, "byte", w, h, 0, 0, -1, 0);code_Reader_Out.get_reader_data_ex(himage, out decode_str, out time);//decode_str,在这里处理解码数据// 显示前处理,pFrameBuffer=RGB数据}return 1;}// 需要调用CameraImage_Destroy释放 ,保存图像处理private void CameraGrabberSaveImageComplete(IntPtr Grabber, IntPtr Image, CameraSdkStatus Status, IntPtr Context){if (Image != IntPtr.Zero){//imgReader.GetReaderString1(Image, null);//string filename = System.bine(// AppDomain.CurrentDomain.BaseDirectory.ToString(),// string.Format("{0}.bmp", System.Environment.TickCount));//byte[] filename_bytes = Encoding.Default.GetBytes(filename);//MvApi.CameraImage_SaveAsBmp(Image, filename_bytes);//MessageBox.Show(filename);}MvApi.CameraImage_Destroy(Image);}

注意事项

先把需要dll文件拷贝到bin文件夹,注意目标平台x86和x64,根据需要拷贝dll文件,MVCAMSDK_X64.dll,MVCAMSDK.dll,MVSDK.dll还需要把迈德威视官方的cs调用文件添加到项目中MVSDK.cs相机设置,要设置触发模式为硬件触发,然后 播放,传感器触发后,软件捕获图像,进行处理halcon解码就不写了,前面几篇文章中都有

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。