我是新手使用OpenCV,我正在测试它试图从车上抢车牌。我一直坚持如何去做。例如,我将从这样的图像开始:
我希望我的最终结果如下:
我知道如何使用自适应阈值以及我在步骤需要从1到2时感到困惑的事情。感谢您的帮助!
答案 0 :(得分:1)
太多硬编码的阈值,但这会有效吗?
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
int main( int argc, char** argv )
{
Mat src = imread( "C:/test/single/license.jpg");
cvtColor(src,src,CV_BGR2GRAY);
blur( src, src, Size(3,3) );
Canny( src, src, 130, 130*4, 3 );
imshow( "edge", src );
GaussianBlur(src,src,Size(3,3),60);
threshold(src,src,0,255,CV_THRESH_OTSU);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(src, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
Mat todraw=Mat::zeros(src.size(), CV_8UC1);
for(size_t i = 0; i < contours.size(); i++)
{
double area = fabs(contourArea(Mat(contours[i])));
if(area<600)
drawContours(todraw,contours,i,Scalar(255),-1);
}
imshow( "plate", todraw );
waitKey(0);
return 0;
}
答案 1 :(得分:0)
这正是您想要的 - https://github.com/MasteringOpenCV/code/tree/master/Chapter5_NumberPlateRecognition
来自Mastering OpenCV Book。它可以对车牌进行分段,也可以对基本的OCR进行分类,以识别字符。