这里题目之所以没有写成“验证码图片中的干扰线去除”,就是因为在干扰线去除做的不是很好,最后也没有找到什么较为通用的算法能够有效地去除干扰线因素。不过也不算完全没有收获,这里就谈谈直线的检测。
OpenCV提供hough变换来检测直线,具体的API是
CvSeq* cvHoughLines2(
CvArr* image,
void* line_storage,
int mehtod,
double rho,
double theta,
int threshold,
double param1 =0,
double param2 =0
);
image就是源图像,单通道图像,因此被检测的图像必须是灰度图,另外需要注意的是原图像在函数调用完成后 会改变,因此有必要在调用这个函数进行hough检测之间对原来的图像进行备份。
line_storage在这里是检测到的线段存储仓. 可以是内存存储仓 (此种情况下,一个线段序列在存储仓中被创建,并且由函数返回),或者是包含线段参数的特殊类型(见下面)的具有单行/单列的矩阵(CvMat*)。矩阵头为函数所修改,使得它的 cols/rows 将包含一组检测到的线段。如果 line_storage 是矩阵,而实际线段的数目超过矩阵尺寸,那么最大可能数目的线段被返回(线段没有按照长度、可信度或其它指标排序).
method表示变换的方法,OpenCV一共给出了3种变换方法,分别是:
CV_HOUGH_STANDARD - 传统或标准 Hough 变换. 每一个线段由两个浮点数 (ρ, θ) 表示