一 : Mat 对象的创建
OpenCvSharp 版本:v4.0.30319
- mat 对象继承了 IDisposable 接口,可以直接用using 语句。
- mat 对象的构造函数有十几个之多,我这里之列举常用的几个。
- Mat 在C++ 中是一个矩阵变量,但是在 C#中是一个对象,只能 new
代码:
1. 创建Mat对象并显示图像
static void Main(string[] args)
{
string imagePath = @"E:\image\lenna.png"; //图片加载路径
/*
* 参数:
* 1:图片路径(一定要正确,找不到会报错)
* 2:指定加载图像的颜色和深度(枚举类型,可以指定多个类型),这里指定的任何颜色和任何深度
*/
using (Mat src = new Mat(imagePath,ImreadModes.AnyColor|ImreadModes.AnyDepth))
{
/*
* new Window :新建一个窗口显示窗口
* 参数:
* 1:窗口名称
* 2:窗口显示的模式(枚举类型)-- 可选参数,可以不指定
* 3:指定要显示的Mat对象。
*/
using (new Window("Input Image", WindowMode.AutoSize, src)) //新建一个窗口显示图片
{
Cv2.WaitKey(0); //等待,一定要等待一下不然一闪而过。
}
}
}
2. 显示加载灰度图像
static void Main(string[] args)
{
string imagePath = @"E:\image\lenna.png"; //图片加载路径
/*
* 参数:
* 1:图片路径(一定要正确,找不到会报错)
* 2:指定加载图像的颜色和深度(枚举类型,可以指定多个类型),这里指定加载灰度图像
*/
using (Mat src = new Mat(imagePath,ImreadModes.Grayscale))
{
/*
* new Window :新建一个窗口显示窗口
* 参数:
* 1:窗口名称
* 2:窗口显示的模式(枚举类型)-- 可选参数,可以不指定
* 3:指定要
*/
using (new Window("Input Image", WindowMode.AutoSize, src)) //新建一个窗口显示图片
{
Cv2.WaitKey(0); //等待
}
}
}
3.自定义图像
static void Main(string[] args)
{
Scalar s = new Scalar(0, 0, 255);//创建一个颜色对象
/*
* 参数:
* 1: 行 --指定图像的像素行数,多个行组成图片的高度
* 2: 列 --指定图像的像素列数,多个列组成图片的宽度
* 3: 对象类型,结构体类型 矩阵数据类型(深度和通道数) MatType
* 4: 图像颜色
*/
Mat m = new Mat(100, 100, MatType.CV_8UC3, s);
using (new Window("M", WindowMode.AutoSize, m))
{
Cv2.WaitKey(0);
}
}
输出图像:
明显的,100个像素宽和100个像素高的图片,颜色是红色,(0,0,255)
4.创建一个已知图像一样大小和类型的图片
public static void CreateImage(string imagePath)
{
using (var src = new Mat(imagePath, ImreadModes.AnyColor | ImreadModes.AnyDepth))
using (var dst = new Mat(src.Size(), src.Type(), Scalar.All(0))) //与原图大小类型一致 ,黑色
{
//dst.Create();//分配新的数据和类型
using (new Window("src", WindowMode.FreeRatio, src))
using (new Window("dst", WindowMode.FreeRatio, dst))
{
Cv2.WaitKey(0);
}
}
}