Android使用OpenCV實現車牌檢測,你學會了嗎?
OpenCV(Open Source Computer Vision Library)是一個基于Apache2.0許可(開源)發行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列C函數和少量C++類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。
OpenCV用C++語言編寫,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要傾向于實時視覺應用,并在可用時利用MMX和SSE指令。
OpenCV可用于開發實時的圖像處理、計算機視覺以及模式識別程序,該程序庫也可以使用英特爾公司的IPP進行加速處理。OpenCV的應用領域包括機器人視覺、模式識別、機器學習、工廠自動化生產線產品檢測、醫學影像、攝像機標定、遙感圖像等。
現在,汽車的蹤影無處不在,公路上疾馳,大街邊臨停,小區中停靠,車庫里停泊。所以車牌識別成為了焦點,而車牌檢測是車牌識別的基礎和前提。
初始化OpenCV
//初始化OpenCV
boolean initState = OpenCVLoader.initLocal();
Log.d(TAG, "onCreate: OpenCV初始化" + initState)
初始化檢測器CascadeClassifier和執行車牌檢測
public Bitmap recognizePlateNumber(Bitmap bitmap) {
Mat imageMat = new Mat();
Utils.bitmapToMat(bitmap, imageMat);
CascadeClassifier classifier = new CascadeClassifier();
try {
InputStream is = getAssets().open("haarcascade_russian_plate_number.xml");
classifier.load(is);
RectVector plates = new RectVector();
classifier.detectMultiScale(imageMat, plates);
int numOfPlates = plates.size();
StringBuilder resultBuilder = new StringBuilder();
for (int i = 0; i < numOfPlates; ++i) {
Rect rect = plates.get(i).clone();
Imgproc.rectangle(imageMat, new Point(rect.tl()), new Point(rect.br()), new Scalar(0, 255, 0), 2);
}
Utils.matToBitmap(imageMat, bitmap);
return bitmap;
} catch (IOException e) {
e.printStackTrace();
} finally {
classifier.close();
}
return null;
}
最終結果:
圖片
目前只實現了圖像中車牌區域檢測,接下來文章我們再繼續研究車牌文字識別。