我正在使用https://www.pyimagesearch.com/2014/05/26/opencv-python-k-me-color-clustering/中的出色代码(这不是我的!)。

我要解决的是,在绘制颜色时要删除某些颜色-在这种情况下,我要在绘制直方图时去除/不测量玩具的白色背景。 在其他情况下,当使用透明背景时,它会拉动灰色/白色选中的背景(例如https://i.stack.imgur.com/WLjsK.png ),因此我想同时移动这两种“颜色”。

有人可以请我朝着解决这个问题的正确方法前进吗?

非常感谢!!

import cv2
import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt

!wget "https://www.beatrix-potter-shop.co.uk/app/uploads/2017/07/PO1424_Benjamin.jpg"

# Load the image
image = cv2.imread("PO1424_Benjamin.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 

# Resize it for efficiency (color ratios are the same)
h, w, _ = image.shape
w_new = int(100 * w / max(w, h) )
h_new = int(100 * h / max(w, h) )

image = cv2.resize(image, (w_new, h_new));

# Step 1: Clustering colours with K-Means
from sklearn.cluster import KMeans

# Reshape the image to be a list of pixels
image_array = image.reshape((image.shape[0] * image.shape[1], 3))

# Clusters the pixels
clt = KMeans(n_clusters = 7)
clt.fit(image_array)

# By Adrian Rosebrock
def centroid_histogram(clt):
 # grab the number of different clusters and create a histogram
 # based on the number of pixels assigned to each cluster
 numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)
 (hist, _) = np.histogram(clt.labels_, bins = numLabels)

 # normalize the histogram, such that it sums to one
 hist = hist.astype("float")
 hist /= hist.sum()

 # return the histogram
 return hist

# Finds how many pixels are in each cluster
hist = centroid_histogram(clt)

# Sort the clusters according to how many pixel they have
zipped = list(zip(hist, clt.cluster_centers_))
zipped.sort(reverse=True, key=lambda x : x[0])
hist, clt.cluster_centers = zip(*zipped)

def plot_colors(hist, centroids):
    # initialize the bar chart representing the relative frequency
    # of each of the colors
    bar = np.zeros((50, 300, 3), dtype = "uint8")
    startX = 0

    # loop over the percentage of each cluster and the color of
    # each cluster
    for (percent, color) in zip(hist, centroids):
        # plot the relative percentage of each cluster
        endX = startX + (percent * 300)
        cv2.rectangle(bar, (int(startX), 0), (int(endX), 50),
            color.astype("uint8").tolist(), -1)
        startX = endX

    # return the bar chart
    return bar

# build a histogram of clusters and then create a figure
# representing the number of pixels labeled to each color
hist = centroid_histogram(clt)
bar = plot_colors(hist, clt.cluster_centers_)

# show our color bart
plt.figure()
plt.axis("on")
plt.imshow(bar)
plt.show()

  ask by BertAlong translate from so

本文未有回复,本站智能推荐:

1回复

如何在Python中使用OpenCV将背景的阴影部分计为背景(如下图)?

我是OpenCV(和StackOverflow)的新手。 我正在用OpenCV编写一个程序,该程序用物体(即,笔(米,电话)放在纸上) 拍照,并计算出物体占图片的百分比 。 我面临的问题是当阈值图像(尝试过的自适应和otsu )照片在边缘周围有点阴影时: 原始图片 结果图片 这
1回复

在Python中叠加两个灰色图像

我在这项任务中遇到了太多困难......我有两个灰色图像,我想将其中一个转换为其他颜色强度(例如 idk green),并将其与原始方案结合起来。 像这样的东西...... 假设我有两个文件: 我将如何最简单地在 python 中完成此操作?
1回复

如何使用python、matplotlib和opencv生成视频?

这是我现在所拥有的。 导入的库: 例如(这部分代码来自互联网示例),我绘制了一个带有“文本”的图。 然后,我将它保存到“1.png”。 最后,我创建了一个视频编写器并将 png 写入视频。 问题来了:我需要把图片保存起来,然后作为opencv可以读取的numpy数组读取,有没有什么办法可以直接把fi
2回复

移动和写入图像的像素-Python-

好的,我在 python 中遇到了一个新手问题。 所以我有一个列表,其中包含我感兴趣的一些像素的坐标。 我想将这些像素移动到另一个图像中或将这些像素保存在新图像中。 到目前为止,我正在使用 cv2 和 matplotlib,我什至想用 RGB 值保存坐标并将其写入另一个图像,但我没有任何想法开始。
1回复

在裁剪图像时,我遇到了一些错误,例如“没有足够的值要解压”

我正在尝试使用 python裁剪图像并绘制到matplotlib.pyplot中,但它显示错误 ** 错误:**
1回复

python中cv2.line()方法的替代方法是什么?

cv2.line()-用于画一条线。 我的环境: IDE:PyCharm Python版本:3.6 Windows 10 我无法在pycharm上安装cv2。 使用的命令: 这里有人可以建议我替代吗?
1回复

有什么简单的方法可以计算弯曲扇区中图像的像素

我正在尝试为我的图像数据创建编码。 所以我想计算图像的一小部分中的像素数。 现在,我已经将它们计数在小方形的部分中。 但是由于我的图像是极坐标图,并且它们往往具有弯曲的特征,所以我认为如果我可以将它们计算为弯曲的部分可能会更好。 有人可以告诉我如何通过将我的图像除以如下所示来计算非
1回复

jupyternotebook不显示图像

和 注意config.data.inspected_image_path和config.data.reference_image_path是有效路径。 没有出现错误,但也没有显示图像。 从 python 文件运行相同的代码会显示图像。 我的笔记本上少了一些东西。 使用jupyter noteboo