我有这个图像,我的目标是从图像中提取文本并将这些文本保存为字符串。我的程序已经能够从图像中检测文本但现在我想提取字符并将其保存为字符串。有办法吗?以下是我用于检测图像中文本的代码。我按照本主题中提到的教程进行了操作: - Extracting text OpenCV。
当我运行该程序时,我可以看到文本被矩形限制,但现在我如何从矩形中提取字符并将其保存为字符串?有办法吗?
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
vector<cv::Rect> detectLetters(cv::Mat img)
{
std::vector<cv::Rect> boundRect;
cv::Mat img_gray, img_sobel, img_threshold, element;
cvtColor(img, img_gray, CV_BGR2GRAY);
cv::Sobel(img_gray, img_sobel, CV_8U, 1, 0, 3, 1, 0, cv::BORDER_DEFAULT);
cv::threshold(img_sobel, img_threshold, 0, 255, CV_THRESH_OTSU+CV_THRESH_BINARY);
element = getStructuringElement(cv::MORPH_RECT, cv::Size(17, 3) );
cv::morphologyEx(img_threshold, img_threshold, CV_MOP_CLOSE, element); //Does the trick
std::vector< std::vector< cv::Point> > contours;
cv::findContours(img_threshold, contours, 0, 1);
std::vector<std::vector<cv::Point> > contours_poly( contours.size() );
for( int i = 0; i < contours.size(); i++ )
if (contours[i].size()>100)
{
cv::approxPolyDP( cv::Mat(contours[i]), contours_poly[i], 3, true );
cv::Rect appRect( boundingRect( cv::Mat(contours_poly[i]) ));
if (appRect.width>appRect.height)
boundRect.push_back(appRect);
}
return boundRect;
}
int main()
{
Mat img;
img = imread("3d.JPG");
std::vector<cv::Rect> letterBBoxes1=detectLetters(img);
for(int i=0; i< letterBBoxes1.size(); i++)
cv::rectangle(img,letterBBoxes1[i],cv::Scalar(0,255,0),3,8,0);
imshow("image",img);
cvWaitKey(0);
}
我的输出图像的链接如下: - http://s26.photobucket.com/user/rebecca1995/media/image_zps3f31a352.jpg.html。
感谢。