EmguCV的学习日志(一)
- EmguCV的学习日志(一) 推荐度:
- 相关推荐
EmguCV的学习日志(一)
由于需要使用到EmguCV,作为初次接触者,参照官方的wiki,记了一些笔记。原网址: .php/Tutorial#C.23
一、映射
函数映射: Emgu.CV.CvInvoke
结构映射: Emgu.CV.Structure.Mxxx
数值映射: Emgu.CV.CvEnum
二、Image
emguCV3.0使用Mat类,内存大小自动分配。
1.1、使用Mat创建Image
<1>创建一个200*400的三通道图像
Mat img = new Mat(200, 400, DepthType.Cv8U, 3);
Mat img = new Mat(img1.Size,DepthType.Cv8U, 3);
<2>创建空白Image(在调用cvInvoke的函数需使用新Image时,需要先创建空的Image)
Mat img = new Mat();
<3>从文件读取图像
Mat img = CvInvoke.Imread("myimage.jpg", CvEnum.LoadImageType.AnyColor);
1.2 使用 Image<,>创建Image
<1>从文件读取
Image<Bgr, Byte> img1 = new Image<Bgr, Byte>("MyImage.jpg");
<2>使用Image<TColor, TDepth>。但是使用该类下的方法时,必须采用相同的颜色或色深类型。
如Image<,>中的SetValue(TColor color, Image<Gray, Byte> mask)函数。
Image<Gray, Byte> image = new Image<Gray, Byte>( width, height);
<3> 创建带背景色的Image
Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(480, 320, new Bgr(255, 0, 0));
Image<Gray, Byte> img1 = new Image<Gray, Byte>(400, 300, new Gray(30));
<4>从 .Net的Bitmap类型创建
Image<Bgr, Byte> img = new Image<Bgr, Byte>(bmp); //where bmp is a Bitmap
TColor参数类型:
-
Gray
-
Bgr (Blue Green Red)
-
Bgra (Blue Green Red Alpha)
-
Hsv (Hue Saturation Value)
-
Hls (Hue Lightness Saturation)
-
Lab (CIE L*a*b*)
-
Luv (CIE L*u*v*)
-
Xyz (CIE XYZ.Rec 709 with D65 white point)
-
Ycc (YCrCb JPEG)
-
TDepth参数类型:
-
Byte
-
SByte
-
Single (float)
-
Double
-
UInt16
-
Int16
-
Int32 (int)
-
2.1.获取Mat类型图像的像素
Mat类型的大小自动分配,因此没有Data属性来直接获取像素。
<1>使用 ToImage 方法将Mat类的图像复制到一个Image<,>类型的图像。
Image<Bgr, Byte> img = mat.ToImage<Bgr, Byte>();
然后使用Image<,>.Data属性获取图像像素。
2.2.使用Image<,>处理像素
<1>The safe (slow) way
Bgr color = img[y, x];
img[y,x] = color;
<2>The fast way
Byte byCurrent = imageGray.Data[x, y, 0];
<3>运算符重载方式
Image<Gray, Byte> image3 = (image1 + image2 - 2.0) * 0.5;
2.3.对Image<,>的所有像素操作
<1>使用内置函数
Image<Gray, Byte> img2 = img1.Not();
img1._Not();//replace
<2>使用Convert函数,使用匿名委托类型,牺牲很少的效率,但更灵活
① Image<Gray, Byte> img3 = img1.Convert<Byte>
( delegate(Byte b) { return (Byte) (255-b); } );
② Image<Gray, Single> img4 = img1.Convert<Single>
( delegate(Byte b) { return (Single) Math.cos( b * b / 255.0); } );
2.4.在Image<,>图像上绘制对象
使用Draw()方法绘制 fonts, lines, circles, rectangles, boxes, ellipses as well as contours
2.5Image<,>图像类型转换
例如有Image<Bgr, Byte> img1
Image<Gray, Single> img2 = img1.Convert<Gray, Single>();
2.6显示图像
<1>Emgu的ImageBox控件。直接引用图像内存,速度快。
<2>wimForm的pictureBox控件
使用ToBitmap()方法,返回Bitmap类型
三、Matrix
//数据类型参考TDepth的类型列表
Matrix<Single> matrix = new Matrix<Single>(width, height);
- 类继承接口?
- 位图文件(BMP)
- 第二关,KPM算法和next函数值
- 为什么要建议用自增列做主键
- [原创] 在MFC中大家都习惯用CStdioFile来处理文本文件,可是为什么CStdioFile不叫CTextFile?
- python安装cpickle
- 潜在狄利克雷分配(LDA)(latent Dirichlet allocation)
- 两种模块化语法(module.exports,exports,requireexport,import)
- Linux下的mysql ,1142 问题总结
- #1121
- SwingMVC设计模式
- springboot集成rabbitmq,根据查询的信息创建多个消息中心和消息队列,并实现不同的消息发送到不同的消息中心
- 小米笔记本Pro15.6蓝屏(0x00000124)——重装系统,拆机清灰加固态
- kali初讲——Metasploit工具MSF初学
- 怎么在网站中建立一个问答页面(FAQ)?
- ROS2 基础概念 话题
- 【空指针异常,也不全是。】