Forráskód Böngészése

Add files via upload

彩色图片去除阴影App  By 蘭雅    捞鱼吧 bbs.lyvba.com

使用方法:  1.  把图片文件  test.webp 拉到 removeShadow.exe 图标上

2. 或者命令行窗口,执行:    removeShadow.exe   test.webp
          
需要 OpenCV库 的 DLL文件

下载  opencv_world4100.dll 链接地址
https://wwcz.lanzout.com/iD6cx2d5dxyb

===============================
2024.10.23 版本更新,结果文件保存2份,
removeShadow.png              灰度漂白图片
removeShadow_color.png     彩色还原上色图片

实践操作案例方案:
示例图 test.webp 精度太差,直接去除阴影,会在文字聚集处黑圆圈
所以先要 AI 放大 2×,得到 test.webp_2X.png 再去 彩色图片去除阴影
把图片文件  test.webp_2X.png 拉到 removeShadow.exe 图标上
得到的彩图结果,再到  Photoshop里转 LAB模式,调整L通道,效果最佳
蘭雅sRGB 1 hónapja
szülő
commit
f09912340b
1 módosított fájl, 64 hozzáadás és 0 törlés
  1. 64 0
      opencv/cv05_removeShadow.cpp

+ 64 - 0
opencv/cv05_removeShadow.cpp

@@ -0,0 +1,64 @@
+#include <windows.h>
+#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("彩色图片去除阴影App  By 蘭雅    捞鱼吧 bbs.lyvba.com\n");
+        puts("Usage: removeShadow  image\n");
+        int i = getchar();
+        return 8;
+    }
+
+    Mat src = imread(argv[1]);
+    if (src.empty()) {
+        puts("Error: Could not open or find the image.\n");
+        return 1;
+    }
+
+    // 1. 将图像转换为 HSV 色彩空间
+    Mat hsv;
+    cvtColor(src, hsv, COLOR_BGR2HSV);
+    // 分离通道
+    vector<Mat> hsvChannels;
+    split(hsv, hsvChannels);
+
+    // 2. 对 V 通道进行处理
+    Mat vChannel = hsvChannels[2];
+    Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
+    int iteration = 9;
+
+    // 3. 膨胀和腐蚀操作
+    Mat dilateMat;
+    morphologyEx(vChannel, dilateMat, MORPH_DILATE, element, Point(-1, -1), iteration);
+    Mat erodeMat;
+    morphologyEx(dilateMat, erodeMat, MORPH_ERODE, element, Point(-1, -1), iteration);
+
+    // 4. 计算去阴影效果
+    Mat calcMat = ~(erodeMat - vChannel);
+    normalize(calcMat, calcMat, 0, 255, NORM_MINMAX);
+
+    // 5. 将处理后的 V 通道与原始 H 和 S 通道合并
+    hsvChannels[2] = calcMat;
+    Mat result;
+    merge(hsvChannels, hsv);
+
+    // 6. 将 HSV 转换回 BGR 色彩空间
+    cvtColor(hsv, result, COLOR_HSV2BGR);
+
+    // 7. 将结果保存为图像
+    imwrite("removeShadow_color.png", result);
+
+    // 去阴影结果保存为图像
+    imwrite("removeShadow.png", calcMat);
+    imshow("removeShadow.png", calcMat);
+    waitKey(50);
+    MessageBoxA(NULL, "彩色图片去除阴影操作完成,感谢您的试用!\n原创软件->捞鱼吧 bbs.lyvba.com", "彩色图片去除阴影App  By 蘭雅", MB_ICONINFORMATION);
+
+    return 0;
+}