学习图像处理知识---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;

学习图像处理知识---Emgu3.4 CvInvoke Class类学习(一)

透射变换

得到变换矩阵  类比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
)