我正在做一些简单的OCR车牌识别系统 . 我正在使用HaarCascades找到车牌,然后我需要将这个盘子标准化,将其放入我的OCR模块中 . 我正在使用填充来找到车牌的主要轮廓,然后我执行霍夫变换,找到车牌的上下边界:
这是代码的一部分,我执行Hough变换^
HoughLinesP(canny_img, lines, 1, CV_PI/180, 80, 80, 30 );
for ( size_t i = 0; i < lines.size(); i++ ) {
line (output, Point(lines[i][0], lines[i][3]), Point(lines[i][4], lines[i][5]), Scalar(0,0,255), 1, 8 );
}
现在我需要沿着这两条线切割和旋转这张照片 . 我怎样才能做到这一点?我明白我需要使用点Point(lines [i] [0]).. Point(行i),但是我应该用它们做什么?
所以基本上,我需要得到类似的东西:
- Image,我使用了HaarCascades
- 经过一些改造之后我需要得到这样的东西:
所以在第一步我只需要削减上下边界 .
2 回答
你需要使用仿射变换,这里有tutorial . 在您的情况下,您需要选择一些尺寸的车牌,例如
20x100
. 您的目标点将是选择大小的非旋转矩形的3个角,源点将是已 Build 的汽车板的3个角 . 我希望很清楚,如果它不是,请让我知道 - 我会举一些例子 .*\EDIT:
好的,我已经做了一些例子 . 这是代码:
结果:
如果您将使用代码而不进行任何修改,您将获得第一个结果,如果您注释第二行并取消注释第三行,您将获得第二个结果(我认为's what you wanted). To get the second result you just need to find the points where upper and lower lines cross the image border. I' ve在此处标记了它:
所以基本上你需要使用红点 . 要计算它们的位置,你只需要找到蓝线(如果我理解你已经有的话)穿过图像边框 .
这是EmguCv的解决方案: