【Emgu CV教程】2.9、基本方法之对前面章节的一些补充内容

这篇文章是对前面几篇的一个基础知识补充,我的内容是针对零基础的初学者,加上水平有限,因此目录设计的可能有些混乱,但是可以最大限度的保证您能看得懂,代码跑的起来。

请读者多多包含。

1、数据类型

数据类型(图像深度)就是指存储每个像素所用的位数,其实就用类型来表示像素点的值。在Emgu CV中有这么几种:

数据类型数据类型取值范围对应C#的类型
DepthType.Cv8U08 位无符号类型0—255Byte
DepthType.Cv8S18 位有符号类型-128—127SByte
DepthType.Cv16U216 位无符号类型0—65535UInt16
DepthType.Cv16S316 位有符号类型-32768—32767Int16
DepthType.Cv32S432 位整数数据类型-2147483648—2147483647Int32
DepthType.Cv32F532 位浮点数类型±(1.18e-38……3.40e38)float
DepthType.Cv64F632 位双精度类型±(2.23e-308……1.79e308)double

默认的图像深度就是 DepthType.CV8U,所以看到的图像值就是[0,255]

2、Image和Mat相互转换

这两个都是Emgu CV提供的类,可以相互转换。Mat转换成Image时,写法如下:

Image<Bgr, int> tempImage = dstMat.ToImage<Bgr, int>();

Image转换成Mat时,写法如下:

Mat dstMat = new Mat();
dstMat = dstImage.Mat;

3、ConvertTo()函数

ConvertTo()是把一个Mat变量从一种数据类型转换到另一种数据类型,同时可以带上缩放因子和增量,官方介绍如下:

public void ConvertTo(
    IOutputArray m, // 输入图像
    DepthType rtype, // 图像深度
    double alpha = 1.0, // 尺度变换因子,默认值是1.0。可以把输入图像中的每一个元素都乘以alpha。
    double beta = 0.0 // 偏移量,默认值是0。可以把输入图像中的每一个元素都乘以alpha,再加上beta。
)

CvInvoke.Imshow()函数显示图像时,必须是展示的是8位颜色图像,也就是Cv8U或者Cv8S的才可以。Image转换成Mat后,会将Mat变量转换Cv32S,比如下面代码的执行:

因此Image转换成Mat后,需要执行ConvertTo()再转换回Cv8U,保持前后格式的统一。否则肯定会出错,这个之前网上的其它作者们都没有介绍过,是我的原创啊。利用Try、Catch捕捉Imshow()函数显示Image转换的Mat,出错如下:

这个坑在我学习Emgu CV时,很久都没发现原因所在。后来才是偶然间发现的。看看,在教您具体用法的同时,还会教您如何必坑,OK不???

原创不易,请勿抄袭。共同进步,相互学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值