int test_plate_judge() { cout << "test_plate_judge" << endl; Mat src = imread("image/plate_judge.jpg"); //可能是车牌的图块集合 vector<Mat> matVec; //经过SVM判断后得到的图块集合 vector<Mat> resultVec; CPlateLocate lo; lo.setDebug(1); lo.setLifemode(true); int resultLo = lo.plateLocate(src, matVec); if (0 != resultLo) return -1; cout << "plate_locate_img" << endl; if (resultLo == 0) { int num = matVec.size(); for (int j = 0; j < num; j++) { Mat resultMat = matVec[j]; imshow("plate_judge", resultMat); waitKey(0); } destroyWindow("plate_judge"); } CPlateJudge ju; int resultJu = ju.plateJudge(matVec, resultVec); if (0 != resultJu) return -1; cout << "plate_judge_img" << endl; if (resultJu == 0) { int num = resultVec.size(); for (int j = 0; j < num; j++) { Mat resultMat = resultVec[j]; imshow("plate_judge", resultMat); waitKey(0); } destroyWindow("plate_judge"); } return resultJu; }
// 定位并判断车牌有无,放置在指定位置 void tag_data(const char* source_folder, const char* has_plate_folder, const char* no_plate_folder, const char* svm_model) { assert(source_folder); assert(has_plate_folder); assert(no_plate_folder); assert(svm_model); auto files = Utils::getFiles(source_folder); size_t size = files.size(); if (0 == size) { std::cout << "No file found in " << source_folder << std::endl; return; } CPlateLocate locator; CPlateJudge judger; judger.LoadModel(svm_model); for (auto f : files) { auto filename = Utils::getFileName(f); std::cout << "Tagging: " << f << std::endl; // auto plate_string = plate_from_path(f); cv::Mat image = cv::imread(f); assert(!image.empty()); std::vector<cv::Mat> maybe_plates; locator.plateLocate(image, maybe_plates); int plate_index = 0; for (auto plate : maybe_plates) { char save_to[255] = {0}; int result = 0; judger.plateJudge(plate, result); if (result == 1) { // it's a plate sprintf(save_to, "%s/%s_%d.jpg", has_plate_folder, filename.c_str(), plate_index); std::cout << "[Y] -> " << save_to << std::endl; } else { // no plate found sprintf(save_to, "%s/%s_%d.jpg", no_plate_folder, filename.c_str(), plate_index); std::cout << "[N] -> " << save_to << std::endl; } utils::imwrite(save_to, plate); ++plate_index; } } }
static bool plate_judge(const char* image,const char *model) { cv::Mat src = cv::imread(image); assert(!src.empty()); CPlateJudge judger; judger.LoadModel(model); int result; judger.plateJudge(src, result); return result == 1; }
void CBATCHDlg::OnBnClickedButtonJudge() { // TODO: CPlateJudge plate; plate.setDebug(0); for(vector<CString>::size_type v_i = 0; v_i < m_images.size(); ++v_i) { string str = m_images[v_i].GetBuffer(0); Mat src = imread(str, 1); int result = plate.plateJudge(src); if (result == 1) { stringstream ss(stringstream::in | stringstream::out); ss << this->m_savepath << "\\" << v_i << "_judge" << ".jpg"; imwrite(ss.str(), src); } } }
int plate_judge_main(vector<Mat>& src, vector<Mat>& resultDT){ cout << "process plate_judge_main..."; vector<Mat> resultVec; CPlateJudge plate; int resultJu = plate.plateJudge(src, resultVec); if (resultJu == 0) { int num = resultVec.size(); for (int j = 0; j < num; j++) { Mat resultMat = resultVec[j]; show_dialog(resultMat); } cout << "OK"; } cout << endl; return resultJu; }