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.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);}
注意事项
- 先把需要dll文件拷贝到bin文件夹,注意目标平台x86和x64,根据需要拷贝dll文件,MVCAMSDK_X64.dll,MVCAMSDK.dll,MVSDK.dll
- 还需要把迈德威视官方的cs调用文件添加到项目中MVSDK.cs
- 相机设置,要设置触发模式为硬件触发,然后 播放,传感器触发后,软件捕获图像,进行处理
- halcon解码就不写了,前面几篇文章中都有
Halcon 进阶 四 C# 实现 Halcon与迈德威视,视觉解析二维码相关推荐
- 迈德威视工业相机python二次开发,修改相机参数
迈德威视工业相机python二次开发,修改相机参数 1. 调用官方给的参考例程grab.py 例程下载地址:https://www.mindvision.com.cn/rjxz/list_12.asp ...
- 『Halcon与C#混合编程』第二章02_迈德威视工业相机SDK图像变量转换
如果将SDK获取到的图像数据转换为halcon可以使用的变量,并在Halcon窗口中显示. 备注:本笔记仅针对SDK里最简单的方式进行组合,所以不包含相关条件,所以不可用于实际项目.学习相机的型号为迈 ...
- 『Halcon与C#混合编程』第二章01_迈德威视工业相机SDK入门
打开MindVision工业相机开发手册,找到快速开发指南. 备注:本笔记仅针对SDK里最简单的方式进行组合,所以不包含其他相关条件,所以不可直接用于实际项目.学习相机的型号为迈德威视MV-SUA50 ...
- QT5使用迈德威视SDK开发--2021-09-06
目录 背景 注意事项 操作过程 结果 参考 背景 调整曝光之后软触发抓图,再在界面增加新的按钮 注意事项 要使用msvc编译环境 创建新项目时类class的命名要注意 操作过程 新建一个qt的main ...
- 迈德威视相机C#调用例程
本篇讲述迈德威视相机C# 使用. public string Open(string sn,string path="") { try { ...
- 迈德威视工业相机标定
迈德威视相机标定 注意事项: 1.我用的是opencv3.4.3自带官方示例 2.最好先自己拍摄标定的棋盘照片,要求棋盘平整,光线越足越好 3.最好在windows下先标定,我在linux下标定时,出 ...
- 迈德威视工业相机 Linux驱动详细步骤
[关于ubuntu18.04及使用mindvision相机遇到的问题] 一.下载迈德威视工业相机 linux SDK http://www.mindvision.com.cn/rjxz/list_12 ...
- 迈德威视工业相机入门( 基于 Windows 系统 + VS2019 + OpenCV 4.x.x )
迈德威视工业相机入门( 基于 Windows 系统 + VS2019 + OpenCV 4.x.x ) 前言: 一.登录迈德威视官网,下载官方SDK: 二.环境配置,相机显示和参数调整( 基于 VS2 ...
- 迈德威视相机调用( 基于 Linux系统+ OpenCV )
迈德威视相机调用( 基于 Linux系统+ OpenCV ) 前言 一.登录迈德威视官网,下载官方SDK 二.代码调用与视频帧处理( 基于 OpenCV ) 总结 前言 此博客记录了迈德威视工 ...
最新文章
- 第二弹,坐地铁就能学会的3种「非常有趣」的 Python 玩法
- 第十届蓝桥杯java B组—试题C 数列求值
- 查看winpe系统的语言版本
- SpringBatch适配器详解
- ImportError: No module named six
- 从2元钱到年赚20亿元的传奇经历!相信对你一定会有很大的启发!
- Spring 解耦反射创建对象
- 02-Http请求与响应全解
- usb设备的probe全过程
- Node-express写接口的详细步骤
- Smith Builder ERP代码生成器(开源,提供源码下载)
- 12步让你的web1.0变成web2.0
- 怎么把两个pdf合并成一个?pdf合并方法
- LDC注册数据获取|ACE2004, ACE 2005,OntoNotes等数据
- css之让尾部永远固定在页面最下方
- C语言int *a 和int* a的写法
- BNUZ自动打卡系统
- 如何把WORD文档中的其中一页转为横向,其它页不变,仍为纵向
- ToG产品_产品白皮书框架_2019_003
- E课网AHB-SRAMC
热门文章
- HTML+CSS:transform空间转换、translate3d空间位移、perspective透视、rotate3d空间旋转\立方体、scale3d空间缩放
- Porting:linux内核的模块化、根文件系统的制作和自动挂载
- C语言实现四舍五入后保留最后2位小数
- pmp不是计算机专业的,非计算机行业能考PMP吗
- 调用链系列(二):解读UAVStack中的贪吃蛇-调用链
- EMC经典问答85问(70-74问)
- photoshop cs6 简体中文正式版下载
- Python+selenium+chromedriver实现自动登录微博并发微博
- (HDU2016 C++)	数据的交换输出
- 搞定音频文件过大的问题,这些音频压缩软件帮你轻松压缩