目录
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