2013-01-29 3 views
1

도움이 필요하십니까, 다음 질문을 참조하십시오. 나는이 질문을 두 번째 질문합니다. 지난 번 응답을 얻지 못했기 때문입니다. 두 링크 다음 고려 => 1:=> Finding Skew Angle 2:=> Rotating Image as per skew angle기울이기 각도 찾기 및 C++에서 이미지 회전 OpenCV

내가 같은 일을하고 싶어,이 링크에 주어진 코드가 잘 작동합니다. 그러나 문제는이 이미지에 표시된 텍스트를 보면,이 코드는 잘 정렬 된 텍스트 (지정된 링크의 이미지에 표시됨)에서 제대로 작동하지만 텍스트가 흩어져있는 형태 일 때 실패합니다. 흩어져있는 양식의 텍스트가 포함 된 이미지의 경우 어떻게해야합니까? 미리 감사드립니다 .. !! [여기에 주요 도전은 정확한 각도를 찾는 것입니다 ..] 나는이 문제로 인해 매우 좌절했습니다 ... Plz Help .. !!! 다음과 같이

내 코드는 다음과 같습니다 =>

// 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); 

} 
+0

여기에 다시 나타납니다. 너 뭐 해봤 니? –

+0

여기에 내 코드를 넣을까요? 당신이보고 싶다면 ... –

+0

예, 사람들은 이런 식으로 문제를 더 빨리 푸는 경향이 있습니다. –

답변

1

그 접근 방식이 긴 텍스트 라인을 찾는 의존하기 때문에 텍스트를 분산 한 경우 실패 할 운명이다. 또한 "스큐 (skew)"라는 용어는 게시 된 예제에서 순수한 순환이므로이 경우 약간 불행합니다.

내가하는 일은 다양한 방향 (라돈 변환 또는 허프 선 검색)에서 선 영사를하는 것입니다. 선의 투영 방향이 올바른 경우 행간 간격으로 인해 선 영영에 많은 0이 나타납니다. 투영에서 가장 제로 값을 산출하는 방위는 텍스트의 가장 가능한 회전 각입니다.

관련 문제