共计 1526 个字符,预计需要花费 4 分钟才能阅读完成。
提醒:本文最后更新于 2024-08-30 16:01,文中所关联的信息可能已发生改变,请知悉!
素材
max 统计
min 统计
max 图
大于 60 为白色
min 图
小于 20 为白色
代码示例
# python3.6 | |
# utf-8 | |
# LF | |
import cv2 as cv | |
import numpy as np | |
import matplotlib.pyplot as plt | |
def get_1D_2_2D(x): | |
d = {0:[-1, -1], 1:[-1, 0], 2:[-1, 1], 3:[0, 1], 4:[1, 1], 5:[1, 0], 6:[1, -1], 7:[0, -1]} | |
return d[x] | |
def get_dif(img): | |
raw, col = img.shape | |
dif = np.zeros((raw - 1, col - 1, 8)) | |
for i in range(raw - 1): | |
for j in range(col - 1): | |
for m in range(8): | |
d = get_1D_2_2D(m) | |
if(i + d[0] >= 0 and i + d[0] + 1 <= raw - 1 and j + d[1] >= 0 and j + d[1] + 1 <= col -1): | |
dif[i][j][m] = abs(int(img[i][j]) - int(img[i + d[0]][j + d[1]])) + \ | |
abs(int(img[i][j + 1]) - int(img[i + d[0]][j + d[1] + 1])) + \ | |
abs(int(img[i + 1][j + 1]) - int(img[i + d[0] + 1][j + d[1] + 1])) + \ | |
abs(int(img[i + 1][j]) - int(img[i + d[0] + 1][j + d[1]])) | |
return dif | |
def drew_graph(array, flag): | |
cnt = np.zeros(100) | |
raw, col, _ = array.shape | |
for i in range(raw): | |
for j in range(col): | |
d = sorted(array[i][j]) | |
# print(d) | |
if int(d[flag]) < 100: | |
cnt[int(d[flag])] += 1 | |
plt.plot(cnt, color='red') | |
# plt.rcParams['font.sans-serif'] = ['SimHei'] | |
plt.rcParams['axes.unicode_minus'] = False | |
plt.title('max', fontsize=24, color='black') | |
plt.savefig('fenbu.png') | |
plt.show() | |
def get_show(ary): | |
raw, col, _ = ary.shape | |
imin = np.zeros((raw, col)) | |
for i in range(raw): | |
for j in range(col): | |
d = sorted(ary[i][j]) | |
if d[0] <= 20: | |
imin[i][j] = 255 | |
cv.imwrite('min.png', imin) | |
imax = np.zeros((raw, col)) | |
for i in range(raw): | |
for j in range(col): | |
d = sorted(ary[i][j]) | |
if d[7] > 60: | |
imax[i][j] = 255 | |
cv.imwrite('max.png', imax) | |
def main(imgdir): | |
img = cv.imread(imgdir, 0) | |
differ = get_dif(img) | |
# drew_graph(differ, 7) | |
get_show(differ) | |
if __name__ == '__main__': | |
img_dir = '03.png' | |
main(img_dir) |
正文完