Add 7
This commit is contained in:
1 parent
560e271fd2
commit
3ca50553ee
3 files changed
+128
No files matched your search
@@ -0,0 +1,34 @@
|
||||
import cv2 as cv
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
plt.rcParams["font.sans-serif"] = ["SimSun"]
|
||||
|
||||
img = cv.imread(r"img\paopao.jpg", cv.IMREAD_GRAYSCALE)
|
||||
G1 = np.zeros(img.shape, np.uint8)
|
||||
G2 = np.zeros(img.shape, np.uint8)
|
||||
T1 = np.mean(img) # type: ignore
|
||||
diff = 255
|
||||
T0 = 0.01
|
||||
while diff > T0:
|
||||
_, G1 = cv.threshold(img, T1, 255, cv.THRESH_TOZERO_INV)
|
||||
_, G2 = cv.threshold(img, T1, 255, cv.THRESH_TOZERO)
|
||||
loc1 = np.where(G1 > 0.001) # type: ignore
|
||||
loc2 = np.where(G2 > 0.001) # type: ignore
|
||||
ave1 = np.mean(G1[loc1]) # type: ignore
|
||||
ave2 = np.mean(G2[loc2]) # type: ignore
|
||||
T2 = (ave1 + ave2) / 2
|
||||
diff = np.abs(T1 - T2)
|
||||
T1 = T2
|
||||
_, img_result = cv.threshold(img, T1, 255, cv.THRESH_BINARY)
|
||||
plt.figure()
|
||||
plt.subplot(121)
|
||||
plt.axis("off")
|
||||
plt.imshow(img, cmap="gray")
|
||||
plt.title("原灰度图像")
|
||||
plt.subplot(122)
|
||||
plt.axis("off")
|
||||
plt.imshow(img_result, cmap="gray")
|
||||
plt.title("迭代全阈值分割二值图像")
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
@@ -0,0 +1,53 @@
|
||||
import cv2 as cv
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
plt.rcParams["font.sans-serif"] = ["SimSun"]
|
||||
|
||||
|
||||
def histogram(img):
|
||||
row, col = img.shape
|
||||
hist = [0] * 256
|
||||
for i in range(row):
|
||||
for j in range(col):
|
||||
hist[img[i, j]] += 1
|
||||
return hist
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
img = cv.imread(r"img\polygon_draw.jpg", cv.IMREAD_GRAYSCALE)
|
||||
img_noisy = np.uint8(img + 0.8 * img.std() * np.random.standard_normal(img.shape))
|
||||
img_noisy_blur = cv.GaussianBlur(img_noisy, (9, 9), 0) # type: ignore
|
||||
_, img_result = cv.threshold(img_noisy, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU) # type: ignore
|
||||
_, img_result_blur = cv.threshold(
|
||||
img_noisy_blur, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU
|
||||
)
|
||||
plt.figure()
|
||||
plt.subplot(231)
|
||||
plt.axis("off")
|
||||
plt.imshow(img_noisy, cmap="gray")
|
||||
plt.title("带噪声的图像")
|
||||
plt.subplot(232)
|
||||
plt.xlabel("灰度值")
|
||||
plt.ylabel("像素个数")
|
||||
plt.bar(range(256), histogram(img_noisy))
|
||||
plt.title("噪声图像直方图")
|
||||
plt.subplot(233)
|
||||
plt.axis("off")
|
||||
plt.imshow(img_result, cmap="gray")
|
||||
plt.title("带噪声图像的 OTSU 分割")
|
||||
plt.subplot(234)
|
||||
plt.axis("off")
|
||||
plt.imshow(img_noisy_blur, cmap="gray")
|
||||
plt.title("高斯平滑的图像")
|
||||
plt.subplot(235)
|
||||
plt.xlabel("灰度值")
|
||||
plt.ylabel("像素个数")
|
||||
plt.bar(range(256), histogram(img_noisy_blur))
|
||||
plt.title("平滑图像直方图")
|
||||
plt.subplot(236)
|
||||
plt.axis("off")
|
||||
plt.imshow(img_result_blur, cmap="gray")
|
||||
plt.title("平滑图像的 OTSU 分割")
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
@@ -0,0 +1,41 @@
|
||||
import cv2 as cv
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
plt.rcParams["font.sans-serif"] = ["SimSun"]
|
||||
|
||||
img = cv.imread(r"img\light_circle.jpg", cv.IMREAD_GRAYSCALE)
|
||||
kernalSize = 19
|
||||
img_adapt = cv.adaptiveThreshold(
|
||||
img, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, kernalSize, 6
|
||||
)
|
||||
img_tophat = cv.morphologyEx(
|
||||
img, cv.MORPH_TOPHAT, cv.getStructuringElement(cv.MORPH_ELLIPSE, (45, 45))
|
||||
)
|
||||
plt.figure()
|
||||
plt.subplot(121)
|
||||
plt.imshow(img, cmap="gray")
|
||||
plt.title("待处理灰度图像")
|
||||
plt.axis("off")
|
||||
plt.subplot(122)
|
||||
plt.imshow(img_adapt, cmap="gray")
|
||||
plt.title("自适应阈值分割结果")
|
||||
plt.axis("off")
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
|
||||
# # 交互式调整参数
|
||||
# kernalSize = 7
|
||||
# plt.ion()
|
||||
# for i in range(10):
|
||||
# c = 4
|
||||
# for j in range(10):
|
||||
# plt.cla()
|
||||
# img_seg_adapt = cv.adaptiveThreshold(
|
||||
# img0, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, kernalSize, c
|
||||
# )
|
||||
# plt.imshow(img_seg_adapt, cmap="gray")
|
||||
# print(kernalSize, c)
|
||||
# plt.pause(0.01)
|
||||
# c += 2
|
||||
# kernalSize += 2
|
||||
# plt.show()
|
||||
Reference in new issue
Block a user