Android使用OpenCV實(shí)現(xiàn)車(chē)牌檢測(cè),你學(xué)會(huì)了嗎?
OpenCV(Open Source Computer Vision Library)是一個(gè)基于Apache2.0許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列C函數(shù)和少量C++類(lèi)構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。
OpenCV用C++語(yǔ)言編寫(xiě),它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要傾向于實(shí)時(shí)視覺(jué)應(yīng)用,并在可用時(shí)利用MMX和SSE指令。
OpenCV可用于開(kāi)發(fā)實(shí)時(shí)的圖像處理、計(jì)算機(jī)視覺(jué)以及模式識(shí)別程序,該程序庫(kù)也可以使用英特爾公司的IPP進(jìn)行加速處理。OpenCV的應(yīng)用領(lǐng)域包括機(jī)器人視覺(jué)、模式識(shí)別、機(jī)器學(xué)習(xí)、工廠自動(dòng)化生產(chǎn)線產(chǎn)品檢測(cè)、醫(yī)學(xué)影像、攝像機(jī)標(biāo)定、遙感圖像等。
現(xiàn)在,汽車(chē)的蹤影無(wú)處不在,公路上疾馳,大街邊臨停,小區(qū)中???,車(chē)庫(kù)里停泊。所以車(chē)牌識(shí)別成為了焦點(diǎn),而車(chē)牌檢測(cè)是車(chē)牌識(shí)別的基礎(chǔ)和前提。
初始化OpenCV
//初始化OpenCV
boolean initState = OpenCVLoader.initLocal();
Log.d(TAG, "onCreate: OpenCV初始化" + initState)
初始化檢測(cè)器CascadeClassifier和執(zhí)行車(chē)牌檢測(cè)
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;
}
最終結(jié)果:
圖片
目前只實(shí)現(xiàn)了圖像中車(chē)牌區(qū)域檢測(cè),接下來(lái)文章我們?cè)倮^續(xù)研究車(chē)牌文字識(shí)別。