您的位置:首页 > 运维架构

Opencv传递Mat类参数给Emgucv的Image类

2015-07-23 15:07 459 查看
这篇文章来说说怎么将Opencv的Mat通过dll链接库传递参数给Emgucv的Image类使用。

这里还是借助两个中间量来实现这个工程,即Opencv中的 IplImage类和Emgucv里的MIplImage类。

首先,将Mat类转换为IplImage指针

void* MatToIplImage(Mat src)
{
IplImage dst = src;   //将Mat类转换成IplImage
return &dst;      //返回IplImage指针
}


然后,将IplImage指针参数返回并转换成Emgucv中的Image对象

在这个过程中,要先将IplImage指针转换成MIplImage结构

/// <summary>
/// 将IplImage指针转换成MIplImage结构
/// </summary>
/// <param name="ptr">IplImage指针</param>
/// <returns>返回MIplImage结构</returns>
public static MIplImage IplImagePointerToMIplImage(IntPtr ptr)
{
return (MIplImage)Marshal.PtrToStructure(ptr, typeof(MIplImage));
}


然后在通过MIplImage结构这个桥梁,将IplImage指针转换成Emgucv中的Image对象

/// <summary>
/// 将IplImage指针转换成Emgucv中的Image对象;
/// 注意:这里需要您自己根据IplImage中的depth和nChannels来决定
/// </summary>
/// <typeparam name="TColor">Color type of this image (either Gray, Bgr, Bgra, Hsv, Hls, Lab, Luv, Xyz or Ycc)</typeparam>
/// <typeparam name="TDepth">Depth of this image (either Byte, SByte, Single, double, UInt16, Int16 or Int32)</typeparam>
/// <param name="ptr">IplImage指针</param>
/// <returns>返回Image对象</returns>
public static Image<TColor, TDepth> IplImagePointerToEmgucvImage<TColor, TDepth>(IntPtr ptrPic)
where TColor : struct, IColor
where TDepth : new()
{
MIplImage mi = IplImagePointerToMIplImage(ptrPic);
return new Image<TColor, TDepth>(mi.width, mi.height, mi.widthStep, mi.imageData);
}


Emgucv传递Image类参数给Opencv的Mat类的操作,请点击这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: