本篇讲述迈德威视相机C# 使用。

public string Open(string sn,string path="") {

try
            {
                // 关闭设备 
                Close(sn);
                // 设备参数初始化
                var baseInfo = MDCameraBaseInfos.Find(x => x.Sn == sn);
                if (baseInfo == null)
                {
                    return "设备不存在!";
                }
                baseInfo.IsOpen = true;
                if (baseInfo.m_hCamera > 0) {
                    // 初始化参数.
                    if (string.IsNullOrEmpty(path) == false)
                    {
                        MvApi.CameraLoadParameter(baseInfo.m_hCamera, (int)emSdkParameterTeam.PARAMETER_TEAM_DEFAULT);
                        var pathRes = MvApi.CameraReadParameterFromFile(baseInfo.m_hCamera, path);
                    }

ReceiveImage(sn,baseInfo.m_ImageBuffer);
                }
                else { 
                var isInit = MvApi.CameraInit(ref baseInfo.deviceInfo, -1, -1, ref baseInfo.m_hCamera);
                if (isInit == CameraSdkStatus.CAMERA_STATUS_SUCCESS)
                {
                        MvApi.CameraPlay(baseInfo.m_hCamera);
                        // 初始化参数.
                        if (string.IsNullOrEmpty(path) == false)
                        {
                            MvApi.CameraLoadParameter(baseInfo.m_hCamera, (int)emSdkParameterTeam.PARAMETER_TEAM_DEFAULT);
                            var pathRes = MvApi.CameraReadParameterFromFile(baseInfo.m_hCamera, path);
                        }
                        tSdkCameraCapbility tCameraCapability1;
                    //获得相机特性描述
                    MvApi.CameraGetCapability(baseInfo.m_hCamera, out tCameraCapability1);

baseInfo.m_ImageBuffer = Marshal.AllocHGlobal(tCameraCapability1.sResolutionRange.iWidthMax * tCameraCapability1.sResolutionRange.iHeightMax * 3 + 1024);

if (tCameraCapability1.sIspCapacity.bMonoSensor != 0)
                    {
                        // 黑白相机输出8位灰度数据
                        MvApi.CameraSetIspOutFormat(baseInfo.m_hCamera, (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_MONO8);
                    }

//初始化显示模块,使用SDK内部封装好的显示接口
                    // MvApi.CameraDisplayInit(baseInfo.m_hCamera, PreviewBox.Handle);
                    // MvApi.CameraSetDisplaySize(baseInfo.m_hCamera, PreviewBox.Width, PreviewBox.Height);

//让SDK来根据相机的型号动态创建该相机的配置窗口。
                    //MvApi.CameraCreateSettingPage(baseInfo.m_hCamera, this.Handle, tCameraDevInfoList[0].acFriendlyName,/*SettingPageMsgCalBack*/null,/*m_iSettingPageMsgCallbackCtx*/(IntPtr)null, 0);

//MvApi.CameraPlay(m_hCamera1);
                    // BtnPlay.Text = "Pause";

//两种方式来获得预览图像,设置回调函数或者使用定时器或者独立线程的方式,
                    //主动调用CameraGetImageBuffer接口来抓图。
                    //本例中仅演示了两种的方式,注意,两种方式也可以同时使用,但是在回调函数中,
                    //不要使用CameraGetImageBuffer,否则会造成死锁现象。

ReceiveImage(sn, baseInfo.m_ImageBuffer);

}

}

//

}
            catch { 
            
            
            }

return "";
        }

private void ReceiveImage(string sn, IntPtr m_ImageBuffer)
        {
            var baseInfo = MDCameraBaseInfos.Find(x => x.Sn == sn);
            if (baseInfo == null)
            {
                return;
            }
          
            // ch:开启抓图 | en:start grab
            Task.Run(async () =>
            {
                CameraSdkStatus eStatus;
                tSdkFrameHead FrameHead;
               // IntPtr m_ImageBuffer = IntPtr.Zero;
                IntPtr uRawBuffer;//rawbuffer由SDK内部申请。应用层不要调用delete之类的释放函数
                HObject Hobj = null;
                // 循环取流
                while (baseInfo.IsOpen)
                {
                    //500毫秒超时,图像没捕获到前,线程会被挂起,释放CPU,所以该线程中无需调用sleep
                    eStatus = MvApi.CameraGetImageBuffer(baseInfo.m_hCamera, out FrameHead, out uRawBuffer, 500);

if (eStatus == CameraSdkStatus.CAMERA_STATUS_SUCCESS)//如果是触发模式,则有可能超时
                    {
                        //图像处理,将原始输出转换为RGB格式的位图数据,同时叠加白平衡、饱和度、LUT等ISP处理。
                        MvApi.CameraImageProcess(baseInfo.m_hCamera, uRawBuffer, m_ImageBuffer, ref FrameHead);
                        //叠加十字线、自动曝光窗口、白平衡窗口信息(仅叠加设置为可见状态的)。    
                        MvApi.CameraImageOverlay(baseInfo.m_hCamera, m_ImageBuffer, ref FrameHead);
                        //调用SDK封装好的接口,显示预览图像
                        MvApi.CameraDisplayRGB24(baseInfo.m_hCamera, m_ImageBuffer, ref FrameHead);
                        //成功调用CameraGetImageBuffer后必须释放,下次才能继续调用CameraGetImageBuffer捕获图像。
                        MvApi.CameraReleaseImageBuffer(baseInfo.m_hCamera, uRawBuffer);
                        if (m_ImageBuffer != null) { 
                            
                        }
                        if (Hobj != null)
                        {
                            Hobj.Dispose();
                            Hobj = null;

}
                        if (baseInfo.HObject != null)
                        {
                            baseInfo.HObject.Dispose();
                            baseInfo.HObject = null;

}
                        if (FrameHead.uiMediaType == (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_MONO8)
                        {
                            HOperatorSet.GenImage1(out Hobj, "byte", FrameHead.iWidth, FrameHead.iHeight, m_ImageBuffer);
                            HObject ImageRaw = Hobj;
                            HOperatorSet.MirrorImage(ImageRaw, out Hobj, "row");
                            ImageRaw.Dispose();
                        }
                        else if (FrameHead.uiMediaType == (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_BGR8)
                        {
                            HOperatorSet.GenImageInterleaved(out Hobj,
                                m_ImageBuffer,
                                "bgr",
                                FrameHead.iWidth, FrameHead.iHeight,
                                -1, "byte",
                               FrameHead.iWidth, FrameHead.iHeight,
                                0, 0, -1, 0);

HObject ImageRaw = Hobj;
                            HOperatorSet.MirrorImage(ImageRaw, out Hobj, "row");
                            ImageRaw.Dispose();
                        }
                        baseInfo.HObject = Hobj;

//if (FrameHead.iWidth != m_tFrameHead1.iWidth || FrameHead.iHeight != m_tFrameHead1.iHeight)
                        //{
                        //    m_bEraseBk = true;
                        //    m_tFrameHead1 = FrameHead;
                        //}
                        // m_iDisplayedFrames++;
                    }
                }
                baseInfo.IsOpen = false;
            });

}

迈德威视相机C#调用例程相关推荐

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

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

  2. 迈德威视相机调用( 基于 Windows 系统 + VS2017 + OpenCV 3.x.x )

    迈德威视相机调用( 基于 Windows 系统 + VS2017 + OpenCV 3.x.x ) 前言 一.登录迈德威视官网,下载官方SDK 二.代码调用与视频帧处理( 基于 VS2017 .C++ ...

  3. VS2019+openCV4.2+迈德威视相机

    目录 背景 步骤 注意点 参考 背景 要实时采集图片,并进行处理,想直接使用迈德威视的sdk里面的demo 步骤 到迈德威视官网下载安装sdk,demo里面选择opencv的文件夹 新建项目,在文件夹 ...

  4. 迈德威视相机的图像获取

    1.相机型号: MV-GEF505GM-TP-CL 2.相机软件安装 http://www.mindvision.com.cn/rjxz/list_12.aspx?lcid=138 MindVisio ...

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

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

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

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

  7. 迈德威视网口相机--配置及使用

    迈德威视网口相机–配置及使用 主要步骤: 查看驱动中文档:千兆网相机使用指南,配置PC的IP,使用网口相机IP配置工具进行配置相机,设置相机和IP和名称即可. 由于主机需要和相机配置在同一个网段,需要 ...

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

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

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

    Halcon 进阶 四 C# 实现 Halcon与迈德威视,视觉解析二维码 图像结果 设备操作 初始化 相机设置 图像处理 注意事项 halcon解析二维码 适合各行业 二维码数据采集.关联项目.质量 ...

最新文章

  1. python使用笔记:pyperclip模块安装和使用
  2. 程序员大神用 React “复刻”实现了一个 Windows 11
  3. C++ opengl 放置摄像机
  4. 15 FI配置-财务会计-将记账期间变式分配给公司代码
  5. require.jsAMD模块化编程
  6. linux查看tomcat安装路径
  7. CF 554B 找相同行
  8. python二分查找例题_Python查找数组中数值和下标相等的元素示例【二分查找】
  9. DSA数字签名含C语言实例
  10. 基于FPGA的篮球计分器
  11. Linux----Ubuntu系统官网下载iso镜像文件
  12. 从写博到出书:过程全记录
  13. 【IoT】产品设计:包装盒LOGO设计工艺
  14. 微生物测序分析LEfSe
  15. 《黑客秘笈——渗透测试实用指南》读书笔记(1)
  16. 手机python代码查询四六级准考证_四六级查准考证号的网站是什么
  17. Ambarella Ethernet PHY rtl9000 Linux driver 调试
  18. 微信小程序实现地图自定义大小画圆以及地图自适应(iview-Weapp+微信开发者工具)
  19. android开发指纹解锁,Android-指纹解锁技术
  20. DINE: Domain Adaptation from Single and Multiple Black-box Predictors

热门文章

  1. 各种音视频编解码学习详解(9)--QuickTime系列
  2. /MD /MDd /MT /MTd
  3. ubuntu 修改开机启动项默认值
  4. 你真的了解数据库工程师吗?写给想从事数据库方面工作的朋友
  5. 操作系统复习——操作系统接口
  6. 百度mip推送工具_百度小程序继熊掌号后,百度搜索站长平台的又一脱了裤子放屁闹剧...
  7. 基于DCT变换的JPEG图像压缩原理与JPEG2000编解码原理
  8. 深入理解.sync修饰符
  9. Linux基础 第一节 第二课
  10. 通过依赖注入feign接口启动项目时报Error creating bean with name ‘xxxcontroller‘错误