Как убрать тень с изображения, снятого с помощью мобильной камеры с помощью OpenCV?

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

Любые предложения, как удалить / минимизировать тень.

Исходное изображение

Изображение с контурами

3 ответа

Используя AdaptiveThreshold вместо обычного Otsu Thresholding, я смог решить ту же проблему с OpenCV Java для Android

Вы можете использовать краевой дектектор как Canny:

cv::Mat image = cv::imread( "C:/Users/John/Documents/Stackru/t8keM.png" );
cv::Mat gray_image, dst, color_dst;

cvtColor( image, gray_image, CV_BGR2GRAY );
Canny( gray_image, dst, 50, 200, 3 );
cvtColor( dst, color_dst, CV_GRAY2BGR );

cv::imshow( "image", image );
cv::imshow( "canny", color_dst );

cv::waitKey();

С результатом: введите описание изображения здесь

После этого вы можете использовать cv::findContours(), чтобы найти прямоугольники.

Обычно вы сначала бинаризуете свое изображение, в частности, вы используете адаптивный порог из-за тени. Источник с примером: http://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html

После этого вы сможете работать над ним так, как вам нужно.

Другие вопросы по тегам