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.IO.Path.Combine(//        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);}

注意事项

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

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

  1. 迈德威视工业相机python二次开发,修改相机参数

    迈德威视工业相机python二次开发,修改相机参数 1. 调用官方给的参考例程grab.py 例程下载地址:https://www.mindvision.com.cn/rjxz/list_12.asp ...

  2. 『Halcon与C#混合编程』第二章02_迈德威视工业相机SDK图像变量转换

    如果将SDK获取到的图像数据转换为halcon可以使用的变量,并在Halcon窗口中显示. 备注:本笔记仅针对SDK里最简单的方式进行组合,所以不包含相关条件,所以不可用于实际项目.学习相机的型号为迈 ...

  3. 『Halcon与C#混合编程』第二章01_迈德威视工业相机SDK入门

    打开MindVision工业相机开发手册,找到快速开发指南. 备注:本笔记仅针对SDK里最简单的方式进行组合,所以不包含其他相关条件,所以不可直接用于实际项目.学习相机的型号为迈德威视MV-SUA50 ...

  4. QT5使用迈德威视SDK开发--2021-09-06

    目录 背景 注意事项 操作过程 结果 参考 背景 调整曝光之后软触发抓图,再在界面增加新的按钮 注意事项 要使用msvc编译环境 创建新项目时类class的命名要注意 操作过程 新建一个qt的main ...

  5. 迈德威视相机C#调用例程

    本篇讲述迈德威视相机C# 使用. public string Open(string sn,string path="") { try             {         ...

  6. 迈德威视工业相机标定

    迈德威视相机标定 注意事项: 1.我用的是opencv3.4.3自带官方示例 2.最好先自己拍摄标定的棋盘照片,要求棋盘平整,光线越足越好 3.最好在windows下先标定,我在linux下标定时,出 ...

  7. 迈德威视工业相机 Linux驱动详细步骤

    [关于ubuntu18.04及使用mindvision相机遇到的问题] 一.下载迈德威视工业相机 linux SDK http://www.mindvision.com.cn/rjxz/list_12 ...

  8. 迈德威视工业相机入门( 基于 Windows 系统 + VS2019 + OpenCV 4.x.x )

    迈德威视工业相机入门( 基于 Windows 系统 + VS2019 + OpenCV 4.x.x ) 前言: 一.登录迈德威视官网,下载官方SDK: 二.环境配置,相机显示和参数调整( 基于 VS2 ...

  9. 迈德威视相机调用( 基于 Linux系统+ OpenCV )

    迈德威视相机调用( 基于 Linux系统+ OpenCV ) 前言 一.登录迈德威视官网,下载官方SDK 二.代码调用与视频帧处理( 基于 OpenCV ) 总结 前言     此博客记录了迈德威视工 ...

最新文章

  1. 第二弹,坐地铁就能学会的3种「非常有趣」的 Python 玩法
  2. 第十届蓝桥杯java B组—试题C 数列求值
  3. 查看winpe系统的语言版本
  4. SpringBatch适配器详解
  5. ImportError: No module named six
  6. 从2元钱到年赚20亿元的传奇经历!相信对你一定会有很大的启发!
  7. Spring 解耦反射创建对象
  8. 02-Http请求与响应全解
  9. usb设备的probe全过程
  10. Node-express写接口的详细步骤
  11. Smith Builder ERP代码生成器(开源,提供源码下载)
  12. 12步让你的web1.0变成web2.0
  13. 怎么把两个pdf合并成一个?pdf合并方法
  14. LDC注册数据获取|ACE2004, ACE 2005,OntoNotes等数据
  15. css之让尾部永远固定在页面最下方
  16. C语言int *a 和int* a的写法
  17. BNUZ自动打卡系统
  18. 如何把WORD文档中的其中一页转为横向,其它页不变,仍为纵向
  19. ToG产品_产品白皮书框架_2019_003
  20. E课网AHB-SRAMC

热门文章

  1. HTML+CSS:transform空间转换、translate3d空间位移、perspective透视、rotate3d空间旋转\立方体、scale3d空间缩放
  2. Porting:linux内核的模块化、根文件系统的制作和自动挂载
  3. C语言实现四舍五入后保留最后2位小数
  4. pmp不是计算机专业的,非计算机行业能考PMP吗
  5. 调用链系列(二):解读UAVStack中的贪吃蛇-调用链
  6. EMC经典问答85问(70-74问)
  7. photoshop cs6 简体中文正式版下载
  8. Python+selenium+chromedriver实现自动登录微博并发微博
  9. (HDU2016 C++) 数据的交换输出
  10. 搞定音频文件过大的问题,这些音频压缩软件帮你轻松压缩