Как преобразовать серое изображение буквы в бинарный, не теряя основного контура? - PullRequest
2 голосов
/ 24 апреля 2011

У меня есть небольшое серое изображение с номером на нем. Чтобы попробовать мой метод OCR, я должен преобразовать его в двоичный файл.

Если я использую cvThreshold с 127 в качестве порога, изображение выглядит испорченным из-за градиента вокруг скелетов числа. Я пытался, но не смог найти какие-либо функции повышения резкости изображения для применения до применения порога.

У кого-нибудь есть указатели, пожалуйста?

original gray scale image становится enter image description here, что является сырым.

РЕДАКТИРОВАТЬ: под двоичным я подразумеваю двоичное изображение, где пиксель изображения равен 0 (черный) или 255 (белый).

РЕДАКТИРОВАТЬ 2: О, глядя на журнал изменений заставил меня хихикать.

Ответы [ 2 ]

6 голосов
/ 24 апреля 2011

Сначала играйте с пороговой переменной. Вы можете найти результат, который удовлетворит вас, без необходимости дополнительной обработки вашего приложения. Как насчет использования 120, 110 или 100?

В любом случае, Я не получил тот же вывод, что и вы , используя 127 в качестве параметра. Может быть, вы делаете что-то другое на вашей стороне. Проверьте мой код:

IplImage* input_img = cvLoadImage("6.png", CV_LOAD_IMAGE_UNCHANGED);
if(!input_img)
{
    std::cout << "ERROR: Failed to load input image" << std::endl;
    return -1;
}

cvThreshold(input_img, input_img, 127, 255, CV_THRESH_BINARY);

if( !cvSaveImage("out.png", input_img) )
{
    std::cout << "ERROR: Failed to write image file" << std::endl;
}    

cvReleaseImage(&input_img);

Вход : enter image description here Выход : enter image description here

2 голосов
/ 24 апреля 2011

Есть несколько удобных алгоритмов обработки изображений для этого на AForge.NET .

См. BradleyLocalThresholding для адаптивного порогового значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...