1

助けが必要です。次の質問をご覧ください。前回は回答が得られなかったので、この質問を 2 回目にします。次の 2 つのリンクを検討してください => 1:=> スキュー角度を見つける 2:=> スキュー角度ごとに画像を回転させる

私は同じことをしたいのですが、このリンクにあるコードはうまく機能します。しかし、問題は、これらの画像に表示されているテキストを参照してください。このコードは、適切に配置されたテキストに対してのみ (指定されたリンクの画像に表示されているように) 正常に機能しますが、テキストが散在している場合は失敗します。散らばった形のテキストを含む画像のやり方を教えてください..? 前もって感謝します..!![ここでの主な課題は、正しいスキュー角度を見つけることです..] この問題のために私は非常にイライラしています...助けてください..!!!

私のコードは次のとおりです:=>

// Find Skew angle.
double compute_skew(const char* filename)
{

    // Load in grayscale.
    cv::Mat img = cv::imread(filename, 0);

    // Binarize
    cv::threshold(img, img, 225, 255, cv::THRESH_BINARY);

    // Invert colors
    cv::bitwise_not(img, img);

    cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 3));
    cv::erode(img, img, element);

    std::vector<cv::Point> points;
    cv::Mat_<uchar>::iterator it = img.begin<uchar>();
    cv::Mat_<uchar>::iterator end = img.end<uchar>();
    for (; it != end; ++it)
        if (*it)
            points.push_back(it.pos());

    cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));

    double angle = box.angle;
    if (angle < -45.)
        angle += 90.;

    cv::Point2f vertices[4];
    box.points(vertices);
    for(int i = 0; i < 4; ++i)
        cv::line(img, vertices[i], vertices[(i + 1) % 4], cv::Scalar(255, 0, 0), 1, CV_AA);

    std::cout << "File **************Angle***************** " << filename << ": " << angle << std::endl;


    return angle;
}

// Rotate Image  according to skew angle.
void deskew(const char* filename, double angle)
{
    cv::Mat img = cv::imread(filename, 0);

    Point2f src_center(img.cols/2.0F, img.rows/2.0F);
    Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0);
    Mat rotated;
    warpAffine(img, rotated, rot_mat, img.size(), cv::INTER_CUBIC);

    imwrite(filename,rotated);

}
4

1 に答える 1

1

このアプローチは、長いテキスト行の検索に依存しているため、テキストが散在している場合は失敗する運命にあります。また、「スキュー」という用語は、投稿された例では純粋な回転であるため、この場合は少し残念です。

私がすることは、ある範囲の方向にわたって線投影を行うことです(ラドン変換またはハフ線探索を参照)。ラインプロジェクションの向きが正しい場合、ライン間ギャップが原因でラインプロジェクションに多くのゼロが発生します。投影で最もゼロの値を生成する方向は、テキストの最も可能性の高い回転角度です。

于 2013-01-30T12:56:29.327 に答える