opencvc++ 提取图片中的文字
时间: 2023-08-24 20:05:32 浏览: 167
你可以使用OpenCV的Text Detection模块来提取图片中的文字。这里是一个使用OpenCV和Tesseract OCR库的示例代码,可以进行文字检测和提取:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/text.hpp>
using namespace std;
using namespace cv;
using namespace cv::text;
int main()
{
// 读取图像
Mat image = imread("image.jpg");
// 转换为灰度图像
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 创建文本检测器
Ptr<OCRTesseract> ocr = OCRTesseract::create();
// 设置检测器的参数
ocr->setWhitelist("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
// 定义文本区域检测器
Ptr<ERFilter> er_filter1 = createERFilterNM1(loadClassifierNM1("trained_classifierNM1.xml"), 16, 0.00015f, 0.13f, 0.2f, true, 0.1f);
Ptr<ERFilter> er_filter2 = createERFilterNM2(loadClassifierNM2("trained_classifierNM2.xml"), 0.5);
// 定义文本检测器
Ptr<ERFilter> er_filters[] = { er_filter1, er_filter2 };
vector<Mat> channels;
computeNMChannels(gray, channels);
Mat out_img;
vector< vector<ERStat> > regions(channels.size());
for (int c = 0; c < channels.size(); c++)
{
er_filters[c]->run(channels[c], regions[c]);
for (int i = 0; i < regions[c].size(); i++)
{
ERStat er = regions[c][i];
if (er.parent != NULL)
continue;
// 绘制文本区域
rectangle(image, er.rect, Scalar(0, 255, 0), 2);
}
}
// 显示结果
imshow("Text Detection", image);
waitKey(0);
// 提取文本
string text;
ocr->run(image, text);
cout << "Extracted Text: " << text << endl;
return 0;
}
```
请确保已安装OpenCV和Tesseract OCR库,并将图像路径替换为您要处理的图像路径。该代码将在图像上执行文本检测,并提取出检测到的文本。
阅读全文