OpenCV字母表在骨架化后检测和提取字母表的形状

时间:2016-01-21 03:32:53

标签: c++ tesseract opencv3.0

我想从图像中检测并提取字母并创建只包含字母的新图像。我已经在图像上应用了骨架化,之后我想要一些建议。如何使用轮廓或笔划底部检测字母。我正在使用的图像基本上是DVD播放器包装面板,例如,

DVD back panel

我用于骨架化的代码是

cvtColor(input, input, CV_BGR2GRAY);
cv::threshold(input, input, 127, 255, cv::THRESH_BINARY);
cv::Mat skel(input.size(), CV_8UC1, cv::Scalar(0));
cv::Mat temp;
cv::Mat eroded;

cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 3));

bool done;
do
{
    cv::erode(input, eroded, element);
    cv::dilate(eroded, temp, element); // temp = open(input)
    cv::subtract(input, temp, temp);
    cv::bitwise_or(skel, temp, skel);
    eroded.copyTo(input);

    done = (cv::countNonZero(input) == 0);
} while (!done);

骨架化后的输出图像

Image After Skeletonization

来源:http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/

1 个答案:

答案 0 :(得分:2)

在OpenCV 3.0中,有一个额外的文本检测和识别模块。 这是link。 文本检测主要基于极值区域和最大稳定极值区域。 识别部分通过与Tesseract或针对场景文本训练的字母分类器集成来完成。 您可以调整算法的参数,尤其是针对您的案例的blob的最小和最大大小。 示例代码: link