(8)仿射变换
仿射变换能够保证物体形状的“平直性”和“平行性”,是透视变换的特殊形式。仿射
变换包括旋转,平移,缩放等,被广泛应用于测量前的位置校正。
Mat srcImage =Cv2.ImRead(@"D:\Users\FengJianming\C#\
OpenCVSharp\OpenCVSharp\ SMT.jpg");
Cv2.ImShow("src", srcImage);
Mat grayImage = newMat();
Mat binaryImage=newMat();
Cv2.CvtColor(srcImage,grayImage, ColorConversionCodes.BGR2GRAY);
Cv2.Threshold(grayImage,binaryImage, 20, 150, ThresholdTypes.Binary);//转换为
二值图像
Cv2.ImShow("二值化图", binaryImage);
OpenCvSharp.Point[][] contours; //创建存储轮廓的数组
HierarchyIndex[] hierarchy;
Cv2.FindContours(binaryImage,out contours, out hierarchy,RetrievalModes.Ex
ternal, ContourApproximationModes.ApproxNone); //从二值图中检索轮廓,参数:1,
寻找轮廓的图像;2,返回轮廓数组;4,轮廓的检索模式 5,轮廓近似模式
RotatedRect[] outRect = new RotatedRect[contours.Length]; //创建存储外
接矩形的数组
OpenCvSharp.Point[][] contours_poly
=new OpenCvSharp.Point[contours.Length][];
for (int i = 0; i <contours.Length; i++)
{
contours_poly[i]
= Cv2.ApproxPolyDP(contours[i],10,true);//Cv2.ApproxPolyDP()对指定的点集进
行多边形逼近的函数;参数:1,输入的点集;2,指定的精度,也即是原始曲线与近似
曲线之间的最大距离;3,若为 true,则说明近似曲线是闭合的;反之,若为 false,则
断开。
outRect[i] = Cv2.MinAreaRect(contours_poly[i]);//最小外接矩形集合
Point2f[] pot = new Point2f[4];//新建点集合接收点集合
float angle =outRect[i].Angle;//矩形角度
pot = outRect[i].Points();//矩形的 4 个角点