|
|
|
@ -1,13 +1,9 @@
|
|
|
|
|
#include "easypr/core/plate_detect.h"
|
|
|
|
|
#include "easypr/util/util.h"
|
|
|
|
|
|
|
|
|
|
/*! \namespace easypr
|
|
|
|
|
Namespace where all the C++ EasyPR functionality resides
|
|
|
|
|
*/
|
|
|
|
|
namespace easypr {
|
|
|
|
|
|
|
|
|
|
CPlateDetect::CPlateDetect() {
|
|
|
|
|
// cout << "CPlateDetect" << endl;
|
|
|
|
|
m_plateLocate = new CPlateLocate();
|
|
|
|
|
m_plateJudge = new CPlateJudge();
|
|
|
|
|
|
|
|
|
@ -20,18 +16,16 @@ CPlateDetect::~CPlateDetect() {
|
|
|
|
|
SAFE_RELEASE(m_plateJudge);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CPlateDetect::LoadSVM(string s) { m_plateJudge->LoadModel(s.c_str()); }
|
|
|
|
|
|
|
|
|
|
int CPlateDetect::plateDetect(Mat src, vector<CPlate>& resultVec,
|
|
|
|
|
int CPlateDetect::plateDetect(Mat src, std::vector<CPlate>& resultVec,
|
|
|
|
|
bool showDetectArea, int index) {
|
|
|
|
|
vector<Mat> resultPlates;
|
|
|
|
|
std::vector<Mat> resultPlates;
|
|
|
|
|
|
|
|
|
|
vector<CPlate> color_Plates;
|
|
|
|
|
vector<CPlate> sobel_Plates;
|
|
|
|
|
vector<CPlate> color_result_Plates;
|
|
|
|
|
vector<CPlate> sobel_result_Plates;
|
|
|
|
|
std::vector<CPlate> color_Plates;
|
|
|
|
|
std::vector<CPlate> sobel_Plates;
|
|
|
|
|
std::vector<CPlate> color_result_Plates;
|
|
|
|
|
std::vector<CPlate> sobel_result_Plates;
|
|
|
|
|
|
|
|
|
|
vector<CPlate> all_result_Plates;
|
|
|
|
|
std::vector<CPlate> all_result_Plates;
|
|
|
|
|
|
|
|
|
|
//如果颜色查找找到n个以上(包含n个)的车牌,就不再进行Sobel查找了。
|
|
|
|
|
const int color_find_max = m_maxPlates;
|
|
|
|
@ -39,11 +33,6 @@ int CPlateDetect::plateDetect(Mat src, vector<CPlate>& resultVec,
|
|
|
|
|
m_plateLocate->plateColorLocate(src, color_Plates, index);
|
|
|
|
|
m_plateJudge->plateJudge(color_Plates, color_result_Plates);
|
|
|
|
|
|
|
|
|
|
// for (int i=0;i<color_Plates.size();++i)
|
|
|
|
|
//{
|
|
|
|
|
// color_result_Plates.push_back(color_Plates[i]);
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < color_result_Plates.size(); i++) {
|
|
|
|
|
CPlate plate = color_result_Plates[i];
|
|
|
|
|
|
|
|
|
@ -56,11 +45,6 @@ int CPlateDetect::plateDetect(Mat src, vector<CPlate>& resultVec,
|
|
|
|
|
m_plateLocate->plateSobelLocate(src, sobel_Plates, index);
|
|
|
|
|
m_plateJudge->plateJudge(sobel_Plates, sobel_result_Plates);
|
|
|
|
|
|
|
|
|
|
/*for (int i=0;i<sobel_Plates.size();++i)
|
|
|
|
|
{
|
|
|
|
|
sobel_result_Plates.push_back(sobel_Plates[i]);
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < sobel_result_Plates.size(); i++) {
|
|
|
|
|
CPlate plate = sobel_result_Plates[i];
|
|
|
|
|
|
|
|
|
@ -138,4 +122,4 @@ int CPlateDetect::showResult(const Mat& result) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} /*! \namespace easypr*/
|
|
|
|
|
}
|