1.遇到的问题
简单概述下遇到的问题:最近项目需要用到海康的VM算子,作者使用的是高精度匹配算法,渲染控件
mvdRenderActivex1.Display();
显示的颜色是正常的,外框是红色,匹配的轮廓是绿色。如图,
但是使用渲染控件SaveImage方法保存下来的图像是黑白的,
mvdRenderActivex1.SaveImage(saveFile, MVD_FILE_FORMAT.MVD_FILE_BMP,
100, MVD_SAVE_TYPE.MVD_SAVE_RESULT_IMAGE);
如图示,
2.问题原因和解决方法
⑴问题原因
因为高精度匹配算法输入图像只支持灰度图,即图像格式MVD_PIXEL_MONO_08,我的渲染控件加载的图像就是输入图像对象,导致了保存的图像不是原图,而是灰度图。具体如下,
inputImg = new CMvdImage();
inputImg.InitImage(fileDlg.FileName, MVD_PIXEL_FORMAT.MVD_PIXEL_MONO_08);
//mvdRenderActivex1.LoadImageFromObject(inputImg); // 这个就是问题所在,应该使用从原始图像对象加载而不是从MONO_08格式的对象
⑵解决方法
新建图像对象,初始化输入图像路径并指定图像格式为MVD_PIXEL_FORMAT.MVD_PIXEL_RGB_RGB24_C3,再在渲染控件上加载该图像对象。
FilePath = "输入具体图像路径";
// 算子图像输入
inputImg = new CMvdImage();
inputImg.InitImage($"{FilePath}", MVD_PIXEL_FORMAT.MVD_PIXEL_MONO_08);
// 渲染控件图像输入
CMvdImage cImgObj = new CMvdImage();
cImgObj.InitImage($"{FilePath}", MVD_PIXEL_FORMAT.MVD_PIXEL_RGB_RGB24_C3);
mvdRenderActivex1.LoadImageFromObject(cImgObj);
mvdRenderActivex1.Display();
最后在需要的地方使用渲染控件SaveImage方法保存即可。