實現思路:
- 圖將轉為灰度圖
- 將灰度圖進行閉運算操作
- 閉運算后的圖減去原灰度圖再取反
- 將取反后的圖使用歸一化將白色背景修改貼近原圖
opencv實現:
1 Mat src = imread("D:/opencv練習圖片/去陰影.png"); 2 imshow("原圖", src); 3 //1.將圖像轉為灰度圖
4 Mat gray; 5 cvtColor(src, gray, COLOR_BGR2GRAY); 6 //定義腐蝕和膨脹的結構化元素和迭代次數
7 Mat element = getStructuringElement(MORPH_RECT, Size(3, 3)); 8 int iteration = 9; 9 //2.將灰度圖進行閉運算操作
10 Mat closeMat; 11 morphologyEx(gray, closeMat, MORPH_CLOSE, element, Point(-1, -1), iteration); 12 imshow("閉運算", closeMat); 13 //4.閉運算后的圖減去原灰度圖再進行取反操作
14 Mat calcMat = ~(closeMat - gray); 15 imshow("calc", calcMat); 16 //5.使用規一化將原來背景白色的改了和原來灰度圖差不多的灰色
17 Mat removeShadowMat; 18 normalize(calcMat, removeShadowMat, 0, 200, NORM_MINMAX); 19 imshow("dst", removeShadowMat);
原圖:
😃我們可以看到 這里的形態學的妙用:
在對原圖進行閉運算以后,可以發現我們就得到了只有陰影的圖像。