/* * Copyright (c) 2015 New Designs Unlimited, LLC * Opensource Automated License Plate Recognition [http://www.openalpr.com] * * This file is part of OpenAlpr. * * OpenAlpr is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License * version 3 as published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #include "textcontours.h" using namespace std; using namespace cv; namespace alpr { TextContours::TextContours() { } TextContours::TextContours(cv::Mat threshold) { load(threshold); } TextContours::~TextContours() { } void TextContours::load(cv::Mat threshold) { Mat tempThreshold(threshold.size(), CV_8U); threshold.copyTo(tempThreshold); findContours(tempThreshold, contours, // a vector of contours hierarchy, CV_RETR_TREE, // retrieve all contours CV_CHAIN_APPROX_SIMPLE ); // all pixels of each contours for (unsigned int i = 0; i < contours.size(); i++) goodIndices.push_back(true); this->width = threshold.cols; this->height = threshold.rows; } unsigned int TextContours::size() { return contours.size(); } int TextContours::getGoodIndicesCount() { int count = 0; for (unsigned int i = 0; i < goodIndices.size(); i++) { if (goodIndices[i]) count++; } return count; } std::vector TextContours::getIndicesCopy() { vector copyArray; for (unsigned int i = 0; i < goodIndices.size(); i++) { bool val = goodIndices[i]; copyArray.push_back(goodIndices[i]); } return copyArray; } void TextContours::setIndices(std::vector newIndices) { if (newIndices.size() == goodIndices.size()) { for (unsigned int i = 0; i < newIndices.size(); i++) goodIndices[i] = newIndices[i]; } else { assert("Invalid set operation on indices"); } } Mat TextContours::drawDebugImage() { Mat img_contours = Mat::zeros(Size(width, height), CV_8U); return drawDebugImage(img_contours); } Mat TextContours::drawDebugImage(Mat baseImage) { Mat img_contours(baseImage.size(), CV_8U); baseImage.copyTo(img_contours); cvtColor(img_contours, img_contours, CV_GRAY2RGB); vector > allowedContours; for (unsigned int i = 0; i < this->contours.size(); i++) { if (this->goodIndices[i]) allowedContours.push_back(this->contours[i]); } drawContours(img_contours, this->contours, -1, // draw all contours cv::Scalar(255,0,0), // in blue 1); // with a thickness of 1 drawContours(img_contours, allowedContours, -1, // draw all contours cv::Scalar(0,255,0), // in green 1); // with a thickness of 1 return img_contours; } }