迈德威视SDK

引入

 

 

代码

public class MVCamera : InterfaceCamera{#region 属性字段PictureBox pb_ShowImage;//图像框tSdkCameraDevInfo[] tCameraDevInfoList;CameraSdkStatus status;public static CameraHandle[] m_hCamera;             // 句柄CAMERA_SNAP_PROC m_CaptureCallback;IntPtr m_iCaptureCallbackCtx;     //图像回调函数的上下文参数CAMERA_SNAP_PROC pCaptureCallOld = null;IntPtr[] m_ImageBuffer;             // 预览通道RGB图像缓存tSdkCameraCapbility tCameraCapability;  // 相机特性描述HTuple hv_Width, hv_Height, hv_WindowHandle;#endregion#region 构造函数public MVCamera(){}public MVCamera(PictureBox pictureBox){this.pb_ShowImage = pictureBox;}#endregion/// <summary>/// 关闭相机/// </summary>/// <param name="index"></param>public void CloseCamera(int index){}/// <summary>/// 查找相机/// </summary>/// <returns></returns>public int EnumCamera(){//查找相机枚举设备int Nums = 0;status = MvApi.CameraEnumerateDevice(out tCameraDevInfoList);if (tCameraDevInfoList?.Length > 0){Nums = tCameraDevInfoList.Length;m_hCamera = new CameraHandle[tCameraDevInfoList.Length];m_ImageBuffer = new IntPtr[tCameraDevInfoList.Length];}if (status == CameraSdkStatus.CAMERA_STATUS_SUCCESS){for (int i = 0; i < Nums; i++){//2初始化相机+status = MvApi.CameraInit(ref tCameraDevInfoList[i], -1, -1, ref m_hCamera[i]);}}return Nums;}/// <summary>/// 采集图像/// </summary>/// <param name="index"></param>/// <param name="image"></param>public void GrabImage(int index, out HObject image){tSdkFrameHead pFrameHead;IntPtr uRawBuffer;//rawbuffer由SDK内部申请。应用层不要调用delete之类的释放函数HObject ho_BImageRGB2;#region 转Halcon变量//采集图像MvApi.CameraGetImageBuffer(m_hCamera[index], out pFrameHead, out uRawBuffer, 500);//图像处理,将原始输出转换为RGB格式的位图数据,同时叠加白平衡、饱和度、LUT等ISP处理。MvApi.CameraImageProcess(m_hCamera[index], uRawBuffer, m_ImageBuffer[index], ref pFrameHead);//图像变量转换两种方式第一种:gen_image_interleaved(多通道)//HOperatorSet.GenImageInterleaved(out ho_BImageRGB2, m_ImageBuffer, "bgr", pFrameHead.iWidth,//pFrameHead.iHeight, -1, "byte", pFrameHead.iWidth, pFrameHead.iHeight, 0, 0, -1, 0);//第二种方式 gen_image3_extern    gen_image1_externint bytesPerLineRGB = (pFrameHead.iWidth * 3 + 3) / 4 * 4;//24位彩色图像每行所在字节数   int bytesPerLineGray = (pFrameHead.iWidth + 3) / 4 * 4;//8位灰度图每行所在字节数byte[] bufferRGB = new byte[bytesPerLineRGB * pFrameHead.iHeight]; byte[] bufferB = new byte[bytesPerLineGray * pFrameHead.iHeight];byte[] bufferG = new byte[bytesPerLineGray * pFrameHead.iHeight];byte[] bufferR = new byte[bytesPerLineGray * pFrameHead.iHeight];byte[] bufferGray = new byte[bytesPerLineGray * pFrameHead.iHeight];//将相机中采集的非托管内存数据  Copy到托管内存字节数组中  Marshal.Copy(m_ImageBuffer[index], bufferRGB, 0, bytesPerLineRGB * pFrameHead.iHeight);for (int i = 0; i < pFrameHead.iHeight; i++)//如果是24位才这样拆{for (int j = 0; j < pFrameHead.iWidth; j++){bufferB[i * bytesPerLineGray + j] = bufferRGB[i * bytesPerLineRGB + j * 3 + 0];//B分量bufferG[i * bytesPerLineGray + j] = bufferRGB[i * bytesPerLineRGB + j * 3 + 1];//G分量bufferR[i * bytesPerLineGray + j] = bufferRGB[i * bytesPerLineRGB + j * 3 + 2];//R分量}}unsafe{fixed (byte* pr = bufferR, pg = bufferG, pb = bufferB){HOperatorSet.GenImage3Extern(out ho_BImageRGB2, "byte", pFrameHead.iWidth, pFrameHead.iHeight, new IntPtr(pr), new IntPtr(pg), new IntPtr(pb), 0);}}HOperatorSet.Rgb1ToGray(ho_BImageRGB2, out image);if (index == 0){HOperatorSet.RotateImage(image, out image, 90, "constant");HOperatorSet.MirrorImage(image, out image, "row");}else{HOperatorSet.RotateImage(image, out image, 90, "constant");HOperatorSet.MirrorImage(image, out image, "row");}MvApi.CameraReleaseImageBuffer(m_hCamera[index], uRawBuffer);#endregion}/// <summary>/// 打开相机/// </summary>/// <param name="index"></param>public void OpenCamera(int index){//获取当前相机设备信息MvApi.CameraGetCapability(m_hCamera[index], out tCameraCapability);//申请内存m_ImageBuffer[index] = Marshal.AllocHGlobal(tCameraCapability.sResolutionRange.iWidthMax * tCameraCapability.sResolutionRange.iHeightMax * 3 + 1024);//设置开始采集                              MvApi.CameraPlay(m_hCamera[index]);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1380533.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

MVVM 架构,ViewModel和LiveData(一)

MVVM 架构,ViewModel和LiveData(一) 标签&#xff08;空格分隔&#xff09;&#xff1a; 翻译计划 Android开发 原文链接 MVVM architecture, ViewModel and LiveData (Part 1) 正文 在Google I/O之间,Google推出了包含LiveData和ViewModel的组件架构,这有助于开发者们使用…

DRMM model

Paper 的引用&#xff1a; Guo J, Fan Y, Ai Q, et al. A deep relevance matching model for ad-hoc retrieval[C]//Proceedings of the 25th ACM International on Conference on Information and Knowledge Management. ACM, 2016: 55-64. Retrieval or Matching 论文中说到…

JVM(JAVA虚拟机)、DVM(Dalvik虚拟机)和ART虚拟机

一、什么是DVM&#xff0c;和JVM有什么不同&#xff1f; JVM是Java Virtual Machine&#xff0c;而DVM就是Dalvik Virtual Machine&#xff0c;是安卓中使用的虚拟机&#xff0c;所有安卓程序都运行在安卓系统进程里&#xff0c;每个进程对应着一个Dalvik虚拟机实例。他们都提…

关于Hdmi2.1,FRL,DSC,VRR,ALLM你需要知道这些

文章目录 TMDSFRLDSCVRRALLM相关设备Nvidia显卡电视游戏机显示器 注意的坑 最近在研究Hdmi相关内容&#xff08;看游戏设备hhh&#xff09;&#xff0c;网上很多信息都是零零碎碎的&#xff0c;结合自己的一些研究简单记录一下。 Hdmi&#xff0c;High Definition Multimedia I…

HDMI 2.1 VRR功能详解

7.6可变刷新率和快速更新 可变刷新率&#xff08;VRR&#xff09;允许图片在源完成准备后立即通过链路发送。在链路支持的最大字符速率大于给定视频定时所需的速率的情况下&#xff0c;Fast VActive&#xff08;FVA&#xff09;减少了传输图片所需的时间。这些特性提供了性能、…

VVC帧间预测(八)DMVR

解码端运动向量修正(Decoder side motion vector refinement ,DMVR)是为了提高merge模式下双向预测MV的准确性而提出的技术。双向预测是在list0和list1中分别找一个运动向量MV0和MV1&#xff0c;然后将MV0和MV1所指向的预测块进行加权得到最终的预测块。而DMVR不是直接使用MV0和…

ARVR技术 | AR, VR, MR和XR?想搞清楚不?

AR, VR, MR&#xff0c;现在还有XR ?这些缩写是什么?它们代表什么? 让我们快速梳理一下技术术语。 首先&#xff0c;虽然你可能熟悉其中的一些术语&#xff0c;如AR和VR, 但MR和XR对许多人来说仍然是新鲜的术语。 目前的共识是&#xff0c;所有这些互补形式的现实都落在一…

MDD(模型驱动开发)

前言导读 当下企业软件应用开发面临着需求复杂多变、新的需求和系统不断增长&#xff0c;软件系统变得越来越复杂&#xff0c;普通的软件开发方式难以快速满足用户需求。为了解决这些问题&#xff0c;就出现了很多新的方法&#xff0c;其中最突出的一个就是模型驱动开发 MDD &a…

RSCMVR

也是之前发了 ~~ 又带来马教授的~~ 神器稀疏卷积性能和稳健性超越ResNet 标题就是简写可好? 尽管深度神经网络在图像分类方面具有很强的经验性能&#xff08;empirical performance&#xff09;&#xff0c;但这类模型往往被视为「黑盒」&#xff0c;最为人诟病的就是「难以解…

EMD和VMD

作者&#xff1a;桂。 时间&#xff1a;2017-03-06 20:57:22 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6511916.html 前言 本文为Hilbert变换一篇的内容补充&#xff0c;主要内容为&#xff1a; 1&#xff09;EMD原理介绍 2&#xff09;代码分析 3&#xff09…

什么是MDM

MDM或移动设备管理是一种软件应用程序&#xff0c;用于管理企业中的终端&#xff0c;如笔记本电脑、智能手机、平板电脑等。随着越来越多的员工使用这些设备&#xff0c;各种形式和规模的企业现在都转向移动设备管理&#xff0c;以增强数据安全性并提高生产力。 MDM是什么意思…

AVS3中的AMVR和EMVR

在AVS2中运动预测中使用的MV都是1/4像素精度&#xff0c;通过在整像素间插值能显著提升非整像素运动预测的精度&#xff0c;同时带来的问题是随着MV精度的提高编码MVD所需的比特数也会增加。 AMVR AMVR支持的MVD编码5种精度的MVR{1/4,1/2,1,2,4}&#xff0c;索引为0到4&#x…

无线网络视频监控系统基本概念和术语

无线网络视频监控系统基本概念和术语 1.网络摄像机与模拟摄像机的区别 模拟摄像机&#xff0c;或称摄像头&#xff0c;输出CVBS模拟视频信号&#xff0c;PAL制或者NTSC制。模拟摄像机多采用CCD器件&#xff0c;目前也有采用CMOS器件的。有枪机、半球、球机等多种形式&#xff0…

掌握Python的X篇_27_Python中标准库文档查阅方法介绍

前面的博文介绍了python的基本语法、模块及其导入方法。前人将各种方法封装成模块、库、函数供我们使用&#xff0c;如何去使用前人做好的东西&#xff0c;那就需要去查阅文档。今天就介绍python中官方文档的查阅方式。对于初学者而言&#xff0c;python自带的文档就已经足够好…

基本动态规划问题的扩展

基本动态规划问题的扩展 应用动态规划可以有效的解决许多问题&#xff0c;其中有许多问题的数学模型&#xff0c;尤其对一些自从57年就开始研究的基本问题所应用的数学模型&#xff0c;都十分精巧。有关这些问题的解法&#xff0c;我们甚至可以视为标准——也就是最优的解法。…

shell脚本安装nginx

shell脚本原理 以删除桌面文件的脚本为例&#xff0c;执行脚本后&#xff0c;shell脚本将代码给内核&#xff0c;内核读取后执行命令&#xff0c;如果shell脚本也在桌面上&#xff0c;执行后这个脚本文件也会被删除。 变量 echo $SHELL$符表示SHELL是一个变量&#xff0c;变量…

Python(七十九)字符串的常用操作——字符串内容对齐操作的方法

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

docker实现Nginx

文章目录 1.docker 安装2.docker环境实现Nginx 1.docker 安装 1.使用环境为红帽8.1,添加源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2.安装 yum install docker-ce docker-ce-cli containerd.io显示出错 Docker C…

Vue [Day7] 综合案例

核心概念回顾 state&#xff1a;提供数据 getters&#xff1a;提供与state相关的计算属性 mutations&#xff1a;提供方法&#xff0c;用于修改state actions&#xff1a;存放异步操作 modules&#xff1a;存模块 功能分析 https://www.npmjs.com/package/json-server#ge…

反介入/区域拒止:现代战争的演变

译者说明 本文译自美国空军Christopher J. McCarthy少校的一篇文章&#xff0c;略去了原文最后的作者简介。 原文地址&#xff08;可能需要科学上网&#xff09;&#xff1a; https://www.usnwc.edu/Lucent/OpenPdf.aspx?id95 本文仅为翻译&#xff0c;不代表译者赞成或反对原…