学习图像处理知识---Emgu3.4 CvInvoke Class类学习(一)
在上篇文章中,通过相机得到图片,本文开始进行图片常见处理。从CvInvokeClass类学习。
1.文件的引用Namespace: Emgu.CV 调用Emgu.CV.World (in Emgu.CV.World.dll)
2.类为静态类,无需实例化对象。
3.属性设定,静态属性:(可设定)
public static bool UseOpenCL { get; set; } opencl是一个GPU加速技术
public static bool UseOptimized { get; set; } 函数代码优化设定
4.得到图片
public static Mat Imread( string filename, //图片的路径 ImreadModes loadType = ImreadModes.Color //默认类型 如果要变成灰图 ImreadModes.Grayscale,同时可以变尺寸是原来1/n )
5.显示图片
public static void Imshow( string name, //特定的窗口 IInputArray image // 可以用得到图片MAT类 )
6.保存图片
public static bool Imwrite( string filename, //图片的保存路径 IInputArray image, // 要保存图片 params KeyValuePair<ImwriteFlags, int>[] parameters )
7.图片类型转换
public static void CvtColor( IInputArray src, //输入图片对象 IOutputArray dst,//输出图片对象 ColorConversion code, //转换颜色类型 如常见的转灰度图片ColorConversion.Bgr2Gray 注意为原图像的类型要知道 int dstCn = 0 //默认值 )
8.图片尺寸变换
public static void Resize( IInputArray src, //输入图片对象 IOutputArray dst,//输出图片 Size dsize, 尺寸 double fx = 0, double fy = 0, Inter interpolation = Inter.Linear )
9.成比列放大和缩小图片
public static void PyrDown( IInputArray src, //原图 IOutputArray dst,//缩小图 BorderType borderType = BorderType.Reflect101 )
public static void PyrUp( IInputArray src, IOutputArray dst, BorderType borderType = BorderType.Reflect101 )
10.图像旋转变换(没有直接旋转变换函数)采用仿射变换
第一步仿射必须得到仿射矩阵。(点的数组或,一般在机器定位中采用此方法)
public static Mat GetAffineTransform( PointF[] src, //三个点以上,取三个点 PointF[] dest
PointF[] a1 = new PointF[] { new Point(0, 0), new Point(1, 0), new Point(1, 1) }; PointF[] b1 = new PointF[] { new Point(0, 0), new Point(4,0), new Point(4, 4) }; 放大4倍 Mat c = CvInvoke.GetAffineTransform(a1, b1); CvInvoke.WarpAffine(a, b, c,new Size(4*a.Width,4*a.Height) );
得到仿射矩阵,专用旋转变换
public static void GetRotationMatrix2D( PointF center, //旋转中心点 double angle, //角度 double scale,//比例 IOutputArray mapMatrix //输出矩阵 )Mat a = new Mat("sample.bmp");
Mat b = new Mat(); //输出矩阵
Mat c = new Mat();
imageBox1.Image = a;
CvInvoke.GetRotationMatrix2D(new PointF(a.Width/2, a.Height/2), 45, 1, b);
CvInvoke.WarpAffine(a, c, b,new Size(a.Width,a.Height)
);
CvInvoke.Imshow("hui", a);
imageBox2.Image = c;
透射变换
得到变换矩阵 类比3点仿射
public static Mat GetPerspectiveTransform( PointF[] src, 4个点,原图像4个顶点 PointF[] dest 4个点,图像4个顶点 )
public static void WarpPerspective( IInputArray src, IOutputArray dst, IInputArray mapMatrix, Size dsize, Inter interpolationType = Inter.Linear, Warp warpType = Warp.Default, BorderType borderMode = BorderType.Constant, MCvScalar borderValue = null )