工业相机拍摄的图像中,由于摄像质量的限制,图像中的直线经过处理后,会表现出比较严重的锯齿.在这种情况下求取直线的倾角(其实就是直线的斜率),如果是直接选取直线的开始点和结束点来计算,或是用opencv自带的哈夫曼直线方法,都会引起较大的角度偏差,一般会达到好几度.误差这么大,显然达不到工控要求.后来尝试采取直线点集做最小二乘拟合,误差缩小到0.5以下.以下是算法的代码: //最小二乘拟合计算直线的倾角 int pointCount = pointVect.size(); if (pointCou
C2 首先用并查集维护\(1\)的连通块,然后用另外一个并查集维护第\(i\)行中,第\(j\)列之后的第一个\(0\)的位置,就是如果当前位置是\(1\)那么它的父亲是它右边的格子,否则是它自己. 时间复杂度\(O(nm\log m+nq)\). #include<bits/stdc++.h> #define Rint register int using namespace std; const int N = 1003, d[2][4] = {{0, 1, 0, -1}, {1, 0,