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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lsq2902101015/article/details/47022099

这篇文章来说说怎么将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类的操作,请点击这里


猜你喜欢

转载自blog.csdn.net/lsq2902101015/article/details/47022099
今日推荐