【VM服务管家】VM4.x算子SDK开发_3.2 公用工具类

本文档详细介绍了使用VM服务管家VM4.x算子SDK进行图像处理和相机操作的方法,包括图像载入、相机取流、输入图像、实时取流、卡尺ROI生成以及深度学习算子耗时问题的解决。针对每种操作,提供了具体的代码示例和问题分析。
摘要由CSDN通过智能技术生成

3.2.1 图像载入:本地图像的载入方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:彩色图像如何载入?
解答
示例代码如下:
一、彩色图像的载入

1.	C#
2.	 
3.	CMvdImage cMvdImage = new CMvdImage();
4.	cMvdImage.InitImage(ImagePathStr,MVD_PIXEL_FORMAT.MVD_PIXEL_RGB_RGB24_C3);

二、灰度图像的载入

1.	C#
2.	 
3.	CMvdImage cMvdImage = new CMvdImage();
4.	cMvdImage.InitImage(ImagePathStr,MVD_PIXEL_FORMAT.MVD_PIXELMONO_08);

问题根因
不熟悉彩色图像的像素格式。
提示
如果原图像素格式为BGR,需要转换通道灰度值,再调用上述像素格式。其它接口,例如MVD_PIXEL_RGB_BGR24_C3等不可使用。

3.2.2 相机取流:相机SDK取流的方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:如何使用相机SDK取流?
解答
可以通过调用相机SDK来实现相机取流。
1.截取相机帧数据。示例代码如下。

1.	C#
2.	//相机相关变量
3.	private VisionDesigner.Camera.CCameraTool m_cMyCameraToolObj = null;
4.	 
5.	/// <summary>
6.	/// 打开相机并开始取图
7.	/// </summary>
8.	public int OpenCamera(int cameraindex = 0)
9.	{
10.	    try
11.	    {
12.	        //DeviceListAcq();//获取相机列表方法
13.	        //创建相机算子实例
14.	        if (null == m_cMyCameraToolObj)
15.	        {
16.	            m_cMyCameraToolObj = new VisionDesigner.Camera.CCameraTool();
17.	            if (null == m_cMyCameraToolObj)
18.	            {
19.	                return -1;
20.	            }
21.	        }
22.	        //设置连续采集模式
23.	        m_cMyCameraToolObj.SelectDevice(cameraindex);//默认选择索引为0的相机
24.	        m_cMyCameraToolObj.OpenDevice();
25.	        m_cMyCameraToolObj.SetEnumValue("AcquisitionMode", (uint)MVD_CAM_ACQUISITION_MODE.MVD_ACQ_MODE_CONTINUOUS);
26.	        m_cMyCameraToolObj.SetEnumValue("TriggerMode", (uint)MVD_CAM_TRIGGER_MODE.MVD_TRIGGER_MODE_OFF);
27.	        m_cMyCameraToolObj.SetEnumValue("TriggerSource", (uint)MVD_CAM_TRIGGER_SOURCE.MVD_TRIGGER_SOURCE_SOFTWARE);
28.	        m_cMyCameraToolObj.StartGrab();//开始取图
29.	        return 0;
30.	    }
31.	    catch (Exception ex)
32.	    {
33.	        return -1;
34.	    }
35.	}
36.	/// <summary>
37.	/// 从相机获取一帧图像
38.	/// </summary>
39.	private void GetStreamThreadProc()
40.	{
41.	    int nRet = 0;
42.	    CMvdImage imgtemp = null;
43.	    nRet = 0;
44.	    nRet = m_cMyCameraToolObj.CameraGrabResult.GetOneFrameTimeout (ref imgtemp);
45.	    if (0 == nRet && imgtemp != null)
46.	    {
47.	        ImageData imageshow1 = CMvdImageToImageData(imgtemp);
48.	     }
49.	}

2.将相机帧类型CMvdImage图像数据转换成ImageData类型数据,代码如下。

50. C#
51. 	
52.	/// <summary>
53.	/// CMvdImage格式的图像转为imagedata图像
54.	/// </summary>
55.	/// <param name="image"></param>
56.	/// <returns></returns>
57.	public ImageData CMvdImageToImageData(CMvdImage image)
58.	{
59.	    if (image != null)
60.	    {
61.	        ImageData imageData = new ImageData();
62.	        imageData.Width = (int)image.Width;
63.	        imageData.Height = (int)image.Height;
64.	        imageData.PixelFormat = PixelFormats.Gray8;
65.	        imageData.ImageBuffer = new byte[image.GetImageData(0).arrDataBytes.Length];
66.	        Array.Copy(image.GetImageData(0).arrDataBytes, imageData.ImageBuffer, imageData.ImageBuffer.Length);
67.	        return imageData;
68.	    }
69.	    else
70.	    {
71.	        return null;
72.	    }
73.	}

问题根因
不熟悉相机SDK及其接口。

3.2.3 输入图像:给算子模块输入图像数据的方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:如何通过图像数据给算子模块输入图像?
解答
以字符识别算子模块为例,代码如下所示,分为c++和c#。

//C++
//设置输入图像
int width = 2048;   //图像宽度
int height = 2024;  //图像高度
unsigned char* data = new unsigned char[2048*2024];
memset(data, '0', 2048 * 2024);//内存中图像数据

MVD_IMAGE_DATA_INFO stI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值