如何使用OpenCV从使用移动相机拍摄的图像中删除阴影?

时间:2015-07-22 11:09:10

标签: opencv shadow opencv-contour shadow-removal

我需要在图像中找到最大的矩形,但是当我找到轮廓时,阴影会成为轮廓的一部分。

有关如何移除/最小化阴影的任何建议。

原始图片

enter image description here

带轮廓的图像

enter image description here

3 个答案:

答案 0 :(得分:1)

首先,您首先将图像二值化,特别是因为阴影而使用自适应阈值。 来源示例:http://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html

在此之后,您应该能够按照您的需要进行操作。

答案 1 :(得分:0)

您可以使用像Canny这样的边缘检测器:

cv::Mat image = cv::imread( "C:/Users/John/Documents/StackOverflow/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();

结果: enter image description here

之后,您可以使用cv :: findContours()来查找矩形。

答案 2 :(得分:0)

使用 AdaptiveThreshold 而不是正常的 Otsu Thresholding ,我能够解决与OpenCV Java for Android相同的问题