OpenCV C++基于极值区域滤波算法的场景文本检测(OCR)
这个程序使用OpenCV text模块实现基于极值区域滤波算法的场景文本检测。第一组输入输出第二组输入输出代码#include opencv2/text.hpp #include opencv2/highgui.hpp #include opencv2/imgproc.hpp #include vector #include iostream #include iomanip void er_show(vectorMat channels, vectorvectorERStat regions) { for (int c0; c(int)channels.size(); c) { Mat dst Mat::zeros(channels[0].rows2,channels[0].cols2,CV_8UC1); for (int r0; r(int)regions[c].size(); r) { ERStat er regions[c][r]; if (er.parent ! NULL) { int newMaskVal 255; int flags 4 (newMaskVal 8) FLOODFILL_FIXED_RANGE FLOODFILL_MASK_ONLY; floodFill(channels[c],dst,Point(er.pixel%channels[c].cols,er.pixel/channels[c].cols), Scalar(255),0,Scalar(er.level),Scalar(0),flags); } } char buff[20]; char *buff_ptr buff; sprintf(buff, channel %d, c); imshow(buff_ptr, dst); } waitKey(0); } int main() { Mat src imread(scenetext_segmented_word01.jpg); vectorMat channels; computeNMChannels(src, channels); int cn (int)channels.size(); for (int c 0; c cn-1; c) channels.push_back(255-channels[c]); PtrERFilter er_filter1 createERFilterNM1(loadClassifierNM1(trained_classifierNM1.xml),16,0.00015f,0.13f,0.2f,true,0.1f); PtrERFilter er_filter2 createERFilterNM2(loadClassifierNM2(trained_classifierNM2.xml),0.5); vectorvectorERStat regions(channels.size()); for (int c0; c(int)channels.size(); c) { er_filter1-run(channels[c], regions[c]); er_filter2-run(channels[c], regions[c]); } vector vectorVec2i region_groups; vectorRect groups_boxes; erGrouping(src, channels, regions, region_groups, groups_boxes, ERGROUPING_ORIENTATION_HORIZ); er_show(channels,regions); er_filter1.release(); er_filter2.release(); regions.clear(); if (!groups_boxes.empty()) { groups_boxes.clear(); } }text模块里有提供trained_classifierNM1.xml和trained_classifierNM2.xml