Python 独特的颜色检测和动态存储图像

Python 独特的颜色检测和动态存储图像,python,numpy,opencv,machine-learning,computer-vision,Python,Numpy,Opencv,Machine Learning,Computer Vision,如果给定图像,请找出该图像中的唯一颜色,并写出对应于每个唯一颜色的输出图像。 在这种情况下,所有其他没有独特颜色的像素都应该标记为白色 例如,如果一个图像有3种颜色-在输出文件夹中,应该有三个图像,其中每种颜色是分开的。使用opencv和Python 我已经用我的方法创建了唯一的颜色列表。我想要的是给出sample.png图像中所有这些独特颜色的计数,并根据问题给出相应的图像输出。我相信下面的代码(带注释)应该可以帮助您做到这一点 如果任何代码不清楚,请随时跟进 import numpy as

如果给定图像,请找出该图像中的唯一颜色,并写出对应于每个唯一颜色的输出图像。 在这种情况下,所有其他没有独特颜色的像素都应该标记为白色

例如,如果一个图像有3种颜色-在输出文件夹中,应该有三个图像,其中每种颜色是分开的。使用opencv和Python

我已经用我的方法创建了唯一的颜色列表。我想要的是给出sample.png图像中所有这些独特颜色的计数,并根据问题给出相应的图像输出。

我相信下面的代码(带注释)应该可以帮助您做到这一点

如果任何代码不清楚,请随时跟进

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from copy import deepcopy

# Load image and convert it from BGR (opencv default) to RGB
fpath = "dog.png"  # TODO: replace with your path
IMG = cv.cvtColor(cv.imread(fpath), cv.COLOR_BGR2RGB)

# Get dimensions and reshape into (H * W, C) vector - i.e. a long vector, where each element is a tuple corresponding to a color!
H, W, C = IMG.shape
IMG_FLATTENED = np.vstack([IMG[:, w, :] for w in range(W)])

# Get unique colors using np.unique function, and their counts
colors, counts = np.unique(IMG_FLATTENED, axis=0, return_counts = True)

# Jointly loop through colors and counts
for color, count in zip(colors, counts):

    print("COLOR: {}, COUNT: {}".format(color, count))
    # Create placeholder image and mark all pixels as white
    SINGLE_COLOR = (255 * np.ones(IMG.shape)).astype(np.uint8)  # Make sure casted to uint8

    # Compute binary mask of pixel locations where color is, and set color in new image
    color_idx = np.all(IMG[..., :] == color, axis=-1)
    SINGLE_COLOR[color_idx, :] = color

    # Write file to output with color and counts specified
    cv.imwrite("color={}_count={}.png".format(color, count), SINGLE_COLOR)

艾克,他赢了我。好吧,这是我得到的

哦,不,我不认为这条线

blank[img == color] = img[img == color]
按照我的想法行事。我认为这只是巧合,适用于这个案例。我将用一个解决方案来编辑代码,我更确信它适用于所有情况

原始图像

导入cv2
将numpy作为np导入
#加载图像
img=cv2.imread(“circles.png”);
#得到唯一的
唯一颜色,计数=np.unique(img.Reformate(-1,img.shape[-1]),轴=0,返回计数=True);
#把每种颜色分开
拆分=[];
对于范围内的(len(唯一颜色)):
#得到颜色
颜色=独特的颜色[a];
空白=np.类零(img);
遮罩=cv2.inRange(图像、颜色、颜色);#编辑的第1行
空白[mask==255]=img[mask==color];#编辑的第2行
#展示
cv2.imshow(“空白”,空白);
cv2.waitKey(0);
#保存每种颜色及其计数
文件_str=“”;
对于范围(3)内的b:
文件_str+=str(颜色[b])+“_”;
文件_str+=str(计数[a])+“.png”;
cv2.imwrite(文件,空白);

那么您应该编写一个程序来实现这一点。对于上面的评论,我深表歉意。请不要认为这代表了整个stackoverflow社区。如果你能提供一张样本图片和你目前拥有的代码,这将帮助我们理解并解决你的问题。我写了一个kmeans分类代码来检测颜色。但是在返回图像时,我只得到了黑色或白色的背景。虽然我自己解决了。谢谢!:)