【Emgu】一起学EmguCV(二)Image和Matrix的使用
时间:2022-07-23
本文章向大家介绍【Emgu】一起学EmguCV(二)Image和Matrix的使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文链接:https://www.cnblogs.com/bomo/archive/2013/03/28/2986573.html
上一篇简单介绍了EmguCV库的简单配置,并演示了Hello World程序,本篇继续介绍关于Emgu的基本使用
1、关于Image类的使用
Image<TColor, TDepth>用两个参数定义:Color 和 Depth
例如:创建一个8位的灰度图像
//创建一张灰度图
Image<Gray, Byte> img1 = new Image<Gray, Byte>(480, 320);
//创建一张蓝色的图片
Image<Bgr, Byte> img2 = new Image<Bgr, Byte>(480, 320, new Bgr(255, 0, 0));
//从文件创建Image
Image<Bgr, Byte> img3 = new Image<Bgr, Byte>("MyImage.jpg");
//从Bitmap创建Image
Bitmap bmp = new Bitmap("MyImage.jpg");
Image<Bgr, Byte> img4 = new Image<Bgr, Byte>(bmp);
.Net会自动完成垃圾回收,对于比较大的图片,我们可以使用using关键字在不需要的时候自动对其进行回收
using (Image<Gray, Single> image = new Image<Gray, Single>(1000, 800))
{
//对image操作
}
获取和设置像素颜色
有两种方式对图片的像素进行直接操作
Image<Bgr, byte> img = new Image<Bgr, byte>(480, 320, new Bgr(0, 255, 0));
//直接通过索引访问,速度较慢,返回TColor类型
Bgr color = img[100, 100];
img[100, 100] = color;
//通过Data索引访问,速度快
//最后一个参数为通道数,例如Bgr图片的 0:蓝色,1:绿色,2:红色,Gray的0:灰度,返回TDepth类型
Byte blue = img.Data[100, 100, 0];
Byte green = img.Data[100, 100, 1];
Byte red = img.Data[100, 100, 2];
Image<TColor, TDepth>还对操作运算符进行了重载( + - * / )
Image<Bgr, byte> img1 = new Image<Bgr, byte>(480, 320, new Bgr(255, 0, 0));
Image<Bgr, byte> img2 = new Image<Bgr, byte>(480, 320, new Bgr(0, 255, 0));
//img3 == new Image<Bgr, byte>(480, 320, new Bgr(255, 255, 0));
Image<Bgr, byte> img3 = img1 + img2;
Image<TColor, TDepth>有一个Not函数,可以让图片反色
Image<TColor, TDepth>还提供了转换器,可以让我们更方便的编写转换逻辑
Image<TColor, TDepth>还有一个 ToBitmap() 函数可以转换为Bitmap
Image<Bgr, byte> img1 = new Image<Bgr, byte>(@"test.jpg");
Image<Bgr, byte> img2 = img1.Not();
//下面转换效果与Not()函数相同
Image<Bgr, Byte> img3 = img1.Convert<byte>(delegate(Byte b) { return (Byte)(255 - b); });
pictureBox1.Image = img3.ToBitmap();
2、关于Matrix矩阵类的使用
Martix的使用与Image类似,这里就不阐述了
Matrix<Single> matrix = new Matrix<Single>(480, 320);
float f = matrix[100, 100];
float df = matrix.Data[100, 100];
举例子:
Matrix<Byte> mat1 = new Matrix<byte>(new Size(500, 200));
for (int i = 0; i < 200; i++)
for (int j = 0; j < 500; j++)
mat1[i, j] = 100;
imageBox1.Image = mat1.Mat;
mat1.Save("mei.jpg"); //图片
————————————————
- ElasticSearch + Logstash + Kibana 日志采集
- ElasticSearch + Logstash + Kibana 一键安装
- Oracle 表空间管理
- 数据加密字段加密
- 《Netkiller Virtualization 手札》Docker 卷管理
- PHP高级编程之守护进程
- Spring boot with Docker
- Spring boot with Service
- Spring boot with PostgreSQL
- Struts2 S2-046, S2-045 Firewall(漏洞防火墙)
- 应用程序的通信成本
- Spring cloud 之 Feign Client
- Spring Cloud Netflix
- 重新整理AUTO_INCREMENT字段
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法