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

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


  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值