画像内で最大の長方形を見つける必要がありますが、輪郭を見つけると影が輪郭の一部になります。
影を削除/最小化する方法の提案。
元の画像
輪郭のある画像
通常のOtsu ThresholdingではなくAdaptiveThresholdingを使用すると、OpenCV Java for Android で同じ問題を解決できました
通常、最初に適応しきい値を使用して画像を 2 値化し、影を削除します。
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();
その後、 cv::findContours() を使って四角形を見つけることができます。