...
#include < iostream> #include < opencv2\opencv.hpp> #include < opencv2\highgui.hpp> #include < opencv2\imgcodecs.hpp> #include < opencv2\core.hpp> #include < opencv2\imgproc.hpp> #include < opencv2\text.hpp> #include < opencv2/features2d.hpp> #ifdef _DEBUG #pragma comment(lib, "opencv_core300d.lib") #pragma comment(lib, "opencv_highgui300d.lib") #pragma comment(lib, "opencv_imgcodecs300d.lib") #pragma comment(lib, "opencv_text300d.lib") #pragma comment(lib, "opencv_features2d300d.lib") #pragma comment(lib, "opencv_imgproc300d.lib") #else #pragma comment(lib, "opencv_core300.lib") #pragma comment(lib, "opencv_highgui300.lib") #pragma comment(lib, "opencv_imgcodecs300.lib") #pragma comment(lib, "opencv_text300.lib") #pragma comment(lib, "opencv_features2d300.lib") #pragma comment(lib, "opencv_imgproc300d.lib") #endif using namespace std; using namespace cv; void groups_draw(Mat &src, vector< Rect> &groups); void main() { Mat inImg = imread(".\\scenetext01.jpg"); vector< Mat> channels; text::computeNMChannels(inImg, channels); int cn = (int)channels.size(); // Append negative channels to detect ER- (bright regions over dark background) for (int c = 0; c < cn - 1; c++) channels.push_back(255 - channels[c]); Ptr< text::ERFilter> er_filter1 = text::createERFilterNM1(text::loadClassifierNM1(".\\trained_classifierNM1.xml"), 16, 0.00015f, 0.13f, 0.2f, true, 0.1f); Ptr< text::ERFilter> er_filter2 = text::createERFilterNM2(text::loadClassifierNM2(".\\trained_classifierNM2.xml"), 0.5); vector< vector< text::ERStat> > regions(channels.size()); for (int c = 0; c< (int)channels.size(); c++) { er_filter1->run(channels[c], regions[c]); er_filter2->run(channels[c], regions[c]); } // Detect character groups cout << "Grouping extracted ERs ... "; vector< vector< Vec2i> > region_groups; vector< Rect> groups_boxes; text::erGrouping(inImg, channels, regions, region_groups, groups_boxes, text::ERGROUPING_ORIENTATION_HORIZ); groups_draw(inImg, groups_boxes); imshow("grouping", inImg); waitKey(0); } void groups_draw(Mat &src, vector< Rect> &groups) { for (int i = (int)groups.size() - 1; i >= 0; i--) { if (src.type() == CV_8UC3) rectangle(src, groups.at(i).tl(), groups.at(i).br(), Scalar(0, 255, 255), 3, 8); else rectangle(src, groups.at(i).tl(), groups.at(i).br(), Scalar(255), 3, 8); } }///