【使用的函数集合】
【1】自适应阀值算法——实现二值化
cv2.adaptiveThreshold
adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
#返回二值化后的图像矩阵-> dst
src参数:表示输入图像(8位单通道图像)。
maxValue参数:表示使用 THRESH_BINARY 和 THRESH_BINARY_INV 的最大值.
adaptiveMethod参数:表示自适应阈值算法,平均 (ADAPTIVE_THRESH_MEAN_C)或高斯(ADAPTIVE_THRESH_GAUSSIAN_C)。
thresholdType参数:表示阈值类型,必须为THRESH_BINARY或THRESH_BINARY_INV的阈值类型。
blockSize参数:表示块大小(奇数且大于1,比如3,5,7........ )。
C参数:常数,表示从平均值或加权平均值中减去的数。 通常情况下,这是正值,但也可能为零或负值。
一般情况下,blocksize过大会导致图像细节的丢失,过小虽然保存了图像细节,但是也使得运行的时间大幅增加,因此需要进行权衡。
一般情况。参数C是大于0的,C越大说明最后的阈值就会越小,这样导致的结果就是图像的大部分像素会被转换为亮域,即更多的像素点的灰度值大于阈值,被转化为255亮域。C越小时则恰恰相反
【2】中值滤波(参数可调)
中值模糊cv2.medianBlur
对椒盐噪声有很好的处理效果,椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)
参数设置可变
为3时
为5时
【3】HoughCircles找圆(参数可调)
HoughCircles函数的原型为:
void HoughCircles(InputArray image,OutputArray circles, int method, double dp, double minDist, double param1=100, double param2=100, int minRadius=0,int maxRadius=0 )
image为输入图像,要求是灰度图像
circles为输出圆向量,每个向量包括三个浮点型的元素——圆心横坐标,圆心纵坐标和圆半径
method为使用霍夫变换圆检测的算法,Opencv2.4.9只实现了2-1霍夫变换,它的参数是CV_HOUGH_GRADIENT
dp为第一阶段所使用的霍夫空间的分辨率,dp=1时表示霍夫空间与输入图像空间的大小一致,dp=2时霍夫空间是输入图像空间的一半,以此类推
minDist为圆心之间的最小距离,如果检测到的两个圆心之间距离小于该值,则认为它们是同一个圆心
param1为边缘检测时使用Canny算子的高阈值
param2为步骤霍夫空间内累加和大于该阈值的点就对应于圆心。和步骤设定一个阈值,只有相同值的数量大于该阈值,才认为该值是该圆心对应的圆半径;中所共有的阈值。累加器阀值。
minRadius和maxRadius为所检测到的圆半径的最小值和最大值
【4】mask掩膜分割图像
mask与图像的位运算。
【5】形态学腐蚀膨胀
【6】Shi-Tomasi 算法,角点检测、goodFeaturesToTrack函数
void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners,
int maxCorners, double qualityLevel, double minDistance,
InputArray _mask, int blockSize,
bool useHarrisDetector, double harrisK )
_image:8位或32位浮点型输入图像,单通道
_corners:保存检测出的角点
maxCorners:角点数目最大值,如果实际检测的角点超过此值,则只返回前maxCorners个强角点
qualityLevel:角点的品质因子
minDistance:对于初选出的角点而言,如果在其周围minDistance范围内存在其他更强角点,则将此角点删除
_mask:指定感兴趣区,如不需在整幅图上寻找角点,则用此参数指定ROI
blockSize:计算协方差矩阵时的窗口大小
useHarrisDetector:指示是否使用Harris角点检测,如不指定,则计算shi-tomasi角点
harrisK:Harris角点检测需要的k值
【7】读数算法
(1)角度法,容易出现误读到圆盘上不平滑的点,造成结果差异巨大。刻度分界点不太准确。
(2)考虑剪掉圆盘部分再进行角点检测
(3)或者考虑舍弃角点算法,围绕圆心进行腐蚀,直到只剩下一个白色像素点
结合了一下(2)(3)用腐蚀,直到只剩下几个白色像素点,再角点检测。