|
@@ -0,0 +1,48 @@
|
|
|
+#include <opencv2/opencv.hpp>
|
|
|
+
|
|
|
+#pragma comment(lib, "opencv_world4100.lib")
|
|
|
+using namespace cv;
|
|
|
+using namespace std;
|
|
|
+
|
|
|
+int main(int argc, char *argv[])
|
|
|
+{
|
|
|
+ if (argc != 2) {
|
|
|
+ puts("Usage: cv04_removeShadow image\n");
|
|
|
+ return 8;
|
|
|
+ }
|
|
|
+
|
|
|
+ Mat src = imread(argv[1]);
|
|
|
+
|
|
|
+ Mat gray;
|
|
|
+ cvtColor(src, gray, COLOR_BGR2GRAY);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
|
|
|
+ int iteration = 9;
|
|
|
+
|
|
|
+
|
|
|
+ Mat dilateMat;
|
|
|
+ morphologyEx(gray, dilateMat, MORPH_DILATE, element, Point(-1, -1), iteration);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Mat erodeMat;
|
|
|
+ morphologyEx(dilateMat, erodeMat, MORPH_ERODE, element, Point(-1, -1), iteration);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Mat calcMat = ~(erodeMat - gray);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Mat removeShadowMat;
|
|
|
+ normalize(calcMat, removeShadowMat, 0, 200, NORM_MINMAX);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ imwrite("removeShadow.png", removeShadowMat);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|