有的图片是黑白色的,但不是单通道,而是三通道的,是因为 每个 像素点 的 3个值 相同(其中要注意三个通道的像素点的值一样,要是三个通道当前值的平均值(代码上的temp)而不是某个通道上的值)。
也就是说:三通道图可以是黑白图(24bit),但单通道图只能是黑白图(8bit)
我们可以使用三通道的黑白图做风格转换
其中代码如下:
import cv2
import glob
import os
import numpy as np
# Get all png files under the input folder
input_img_path = glob.glob("a/*")
save_path = "blur13x13/"
def mkdir(path):
folder = os.path.exists(path)
if not folder: # 判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path) # makedirs 创建文件时如果路径不存在会创建这个路径
print("--- create new folder... ---")
else:
print("--- There is this folder! ---")
mkdir(save_path) # 调用函数
def rgb2dw(path, size_):
w = size_[0]
h = size_[1]
label_im = cv2.imread(path)
# 修改图像的尺寸大小
# new_array = cv2.resize(label_im, (w, h), interpolation=cv2.INTER_CUBIC)
# data = np.array(new_array, dtype='int32')
data = np.array(label_im, dtype='int32')
for i in range(w):
for j in range(h):
temp = (data[:, :, 0][i][j] + data[:, :, 1][i][j] + data[:, :, 2][i][j]) / 3
data[:, :, 0][i][j] = temp
data[:, :, 1][i][j] = temp
data[:, :, 2][i][j] = temp
return data
i = 0
if __name__ == '__main__':
for file in input_img_path:
# get the file_name of image
file_name = file.split('\')[-1]
img = cv2.imread(file)
### 下面为处理图片的过程
size_ = [img.shape[0], img.shape[1]]
bw = rgb2dw(file, size_)
###
cv2.imwrite(save_path + file_name, bw)
i = i + 1
print("The", i, "picture is currently being processed")



