迈德威视相机C#调用例程
本篇讲述迈德威视相机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#调用例程相关推荐
- 迈德威视相机调用( 基于 Linux系统+ OpenCV )
迈德威视相机调用( 基于 Linux系统+ OpenCV ) 前言 一.登录迈德威视官网,下载官方SDK 二.代码调用与视频帧处理( 基于 OpenCV ) 总结 前言 此博客记录了迈德威视工 ...
- 迈德威视相机调用( 基于 Windows 系统 + VS2017 + OpenCV 3.x.x )
迈德威视相机调用( 基于 Windows 系统 + VS2017 + OpenCV 3.x.x ) 前言 一.登录迈德威视官网,下载官方SDK 二.代码调用与视频帧处理( 基于 VS2017 .C++ ...
- VS2019+openCV4.2+迈德威视相机
目录 背景 步骤 注意点 参考 背景 要实时采集图片,并进行处理,想直接使用迈德威视的sdk里面的demo 步骤 到迈德威视官网下载安装sdk,demo里面选择opencv的文件夹 新建项目,在文件夹 ...
- 迈德威视相机的图像获取
1.相机型号: MV-GEF505GM-TP-CL 2.相机软件安装 http://www.mindvision.com.cn/rjxz/list_12.aspx?lcid=138 MindVisio ...
- 迈德威视工业相机标定
迈德威视相机标定 注意事项: 1.我用的是opencv3.4.3自带官方示例 2.最好先自己拍摄标定的棋盘照片,要求棋盘平整,光线越足越好 3.最好在windows下先标定,我在linux下标定时,出 ...
- 迈德威视工业相机python二次开发,修改相机参数
迈德威视工业相机python二次开发,修改相机参数 1. 调用官方给的参考例程grab.py 例程下载地址:https://www.mindvision.com.cn/rjxz/list_12.asp ...
- 迈德威视网口相机--配置及使用
迈德威视网口相机–配置及使用 主要步骤: 查看驱动中文档:千兆网相机使用指南,配置PC的IP,使用网口相机IP配置工具进行配置相机,设置相机和IP和名称即可. 由于主机需要和相机配置在同一个网段,需要 ...
- 迈德威视工业相机入门( 基于 Windows 系统 + VS2019 + OpenCV 4.x.x )
迈德威视工业相机入门( 基于 Windows 系统 + VS2019 + OpenCV 4.x.x ) 前言: 一.登录迈德威视官网,下载官方SDK: 二.环境配置,相机显示和参数调整( 基于 VS2 ...
- Halcon 进阶 四 C# 实现 Halcon与迈德威视,视觉解析二维码
Halcon 进阶 四 C# 实现 Halcon与迈德威视,视觉解析二维码 图像结果 设备操作 初始化 相机设置 图像处理 注意事项 halcon解析二维码 适合各行业 二维码数据采集.关联项目.质量 ...
最新文章
- python使用笔记:pyperclip模块安装和使用
- 程序员大神用 React “复刻”实现了一个 Windows 11
- C++ opengl 放置摄像机
- 15 FI配置-财务会计-将记账期间变式分配给公司代码
- require.jsAMD模块化编程
- linux查看tomcat安装路径
- CF 554B 找相同行
- python二分查找例题_Python查找数组中数值和下标相等的元素示例【二分查找】
- DSA数字签名含C语言实例
- 基于FPGA的篮球计分器
- Linux----Ubuntu系统官网下载iso镜像文件
- 从写博到出书:过程全记录
- 【IoT】产品设计:包装盒LOGO设计工艺
- 微生物测序分析LEfSe
- 《黑客秘笈——渗透测试实用指南》读书笔记(1)
- 手机python代码查询四六级准考证_四六级查准考证号的网站是什么
- Ambarella Ethernet PHY rtl9000 Linux driver 调试
- 微信小程序实现地图自定义大小画圆以及地图自适应(iview-Weapp+微信开发者工具)
- android开发指纹解锁,Android-指纹解锁技术
- DINE: Domain Adaptation from Single and Multiple Black-box Predictors
热门文章
- 各种音视频编解码学习详解(9)--QuickTime系列
- /MD /MDd /MT /MTd
- ubuntu 修改开机启动项默认值
- 你真的了解数据库工程师吗?写给想从事数据库方面工作的朋友
- 操作系统复习——操作系统接口
- 百度mip推送工具_百度小程序继熊掌号后,百度搜索站长平台的又一脱了裤子放屁闹剧...
- 基于DCT变换的JPEG图像压缩原理与JPEG2000编解码原理
- 深入理解.sync修饰符
- Linux基础 第一节 第二课
- 通过依赖注入feign接口启动项目时报Error creating bean with name ‘xxxcontroller‘错误