如果给定一张图像,找出该图像中的独特颜色,并为每种独特颜色生成对应的输出图像。在这些输出图像中,除了该独特颜色之外的所有其他像素应被标记为白色。
例如,如果一张图像包含3种颜色,输出文件夹中应有三张图像,每张图像分别展示一种颜色。使用Open CV和Python实现。
我已经使用我的方法创建了独特颜色的列表。我希望对sample.png图像中的所有独特颜色进行计数,并按照问题要求生成相应的输出图像。
回答:
我相信下面的代码(附带注释)将有助于你完成这个任务!
如果代码中有任何不清楚的地方,请随时跟进!
import numpy as npimport cv2 as cvimport matplotlib.pyplot as pltfrom copy import deepcopy# 加载图像并将其从BGR(OpenCV默认格式)转换为RGBfpath = "dog.png" # TODO: 替换为你的路径IMG = cv.cvtColor(cv.imread(fpath), cv.COLOR_BGR2RGB)# 获取维度并重塑为(H * W, C)向量 - 即一个长向量,其中每个元素是一个对应颜色的元组!H, W, C = IMG.shapeIMG_FLATTENED = np.vstack([IMG[:, w, :] for w in range(W)])# 使用np.unique函数获取独特颜色及其计数colors, counts = np.unique(IMG_FLATTENED, axis=0, return_counts = True)# 联合遍历颜色和计数for color, count in zip(colors, counts): print("COLOR: {}, COUNT: {}".format(color, count)) # 创建占位图像并将所有像素标记为白色 SINGLE_COLOR = (255 * np.ones(IMG.shape)).astype(np.uint8) # 确保转换为uint8 # 计算颜色所在像素位置的二进制掩码,并在新图像中设置颜色 color_idx = np.all(IMG[..., :] == color, axis=-1) SINGLE_COLOR[color_idx, :] = color # 将文件写入输出,并指定颜色和计数 cv.imwrite("color={}_count={}.png".format(color, count), SINGLE_COLOR)