这个程序使用OpenCV校正AI模型检测到的文本,方便后续识别这些文本。
输入是《OpenCV C++基于AI模型的场景文本检测(OCR)-CSDN博客》检测到的多边形:

这两个多边形很明显是倾斜的,后续的识别模型无法识别这种倾斜的文本,所以需要校正。
程序运行后生成校正后的图片:


现在只关注英文的结果。这个图片太长了,不利于识别,所以把它分作三段:

把这三张图片用《OpenCV C++基于AI模型的场景文本识别(OCR)-CSDN博客》里的程序识别,就可以很轻松识别出来了:



detResults是场景文本检测输出的多边形
代码:
cpp
void fourPointsTransform(const Mat& frame, const Point2f vertices[], Mat& result)
{
const Size outputSize = Size(100, 32);
Point2f targetVertices[4] = {
Point(0, outputSize.height - 1),
Point(0, 0), Point(outputSize.width - 1, 0),
Point(outputSize.width - 1, outputSize.height - 1)
};
Mat rotationMatrix = getPerspectiveTransform(vertices, targetVertices);
warpPerspective(frame, result, rotationMatrix, outputSize);
}
int main(){
if (detResults.size() > 0) {
Mat recInput = frame;
std::vector< std::vector<Point> > contours;
for (uint i = 0; i < detResults.size(); i++){
const auto& quadrangle = detResults[i];
CV_CheckEQ(quadrangle.size(), (size_t)4, "");
contours.emplace_back(quadrangle);
std::vector<Point2f> quadrangle_2f;
for (int j = 0; j < 4; j++)quadrangle_2f.emplace_back(quadrangle[j]);
Mat cropped;
fourPointsTransform(recInput, &quadrangle_2f[0], cropped);
imshow("cropped",cropped);
waitKey();
}
}
}