From 739d8bd16c3678c9748310f02efb233d9b9aab21 Mon Sep 17 00:00:00 2001 From: tangchao Date: Fri, 13 May 2022 17:52:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=863=E7=A7=8D=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E6=8F=90=E5=8F=96=E4=BA=91=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloudage.py | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 cloudage.py diff --git a/cloudage.py b/cloudage.py new file mode 100644 index 0000000..56aceb3 --- /dev/null +++ b/cloudage.py @@ -0,0 +1,89 @@ +import datetime, math, os, sys, logging +import cv2 +import numpy as np + + +def f1(image_path): + # Load an image + img = cv2.imread(image_path) + # img = cv2.imread(image_path, 0) # Load an image in grayscale + + b, g, r = cv2.split(img) + cloud = r / b + + ret, cloud_BINARY = cv2.threshold(cloud, 0.6, 255, cv2.THRESH_BINARY) # 文献中推荐阈值为0.6 + cloudage = cloud_BINARY.sum() / (cloud_BINARY.size * 255) + + print("r/b算法,云量为%f\n" % cloudage) + + tmp = image_path.split('.') + out = tmp[0] + "_r_b." + tmp[1] + cv2.imwrite(out, cloud_BINARY) + + # cv2.imshow('image', cloud_BINARY) + cv2.waitKey(0) + cv2.destroyAllWindows() + + +def f2(image_path): + img = cv2.imread(image_path) + + b, g, r = cv2.split(img) + cloud = (b-r) / (b+r) + + ret, cloud_BINARY = cv2.threshold(cloud, 0.2, 255, cv2.THRESH_BINARY_INV) + cloudage = cloud_BINARY.sum() / (cloud_BINARY.size * 255) + + print("(b-r) / (b+r)算法,云量为%f\n" % cloudage) + + tmp = image_path.split('.') + out = tmp[0] + "_(b-r)_(b+r)." + tmp[1] + cv2.imwrite(out, cloud_BINARY) + + # cv2.imshow('image', cloud_BINARY) + cv2.waitKey(0) + cv2.destroyAllWindows() + + +def f3(image_path): + img = cv2.imread(image_path) + b, g, r = cv2.split(img) + + # # 转到HSV空间 + # hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) + # h, s, v = cv2.split(hsv) + + # 转到HLS空间 + hls = cv2.cvtColor(img, cv2.COLOR_BGR2HLS) # 这就是ihs颜色空间: + h, l, s = cv2.split(hls) + + μ_Clouds = 12.7 + σ_Clouds = 3.7 + + μ_sky = 45.3 + σ_sky = 4.4 + + # np.where用法:https://www.zhihu.com/question/62844162 + clouds_loc = np.where(s < μ_Clouds + 3 * σ_Clouds) # 厚云 + sky_loc = np.where(s > μ_sky - 3 * σ_sky) # 天空 + unknow_loc = np.where((μ_Clouds + 3 * σ_Clouds <= s) & (s <= μ_sky - 3 * σ_sky)) # 薄云 + + s[sky_loc] = 1 + s[clouds_loc] = 2 + s[unknow_loc] = 3 + + tmp = image_path.split('.') + out = tmp[0] + "_saturation." + tmp[1] + cv2.imwrite(out, s) + + # cv2.imshow('image', cloud_BINARY) + cv2.waitKey(0) + cv2.destroyAllWindows() + + +if __name__ == '__main__': + image_path = r'D:\PycharmProjects\cloudage\photo\photo7.jpg' + # image_path = r'D:\PycharmProjects\cloudage\photo\cloud1_perfect.jpg' # f3全为天空 + f1(image_path) + f2(image_path) + f3(image_path)