gpt4 book ai didi

python - 如何用OpenCV计算某种颜色的像素数?

转载 作者:行者123 更新时间:2023-12-01 01:19:03 25 4
gpt4 key购买 nike

我正在尝试计算图片中特定颜色范围内的像素百分比。

总的来说,我对 OpenCV 和 python 还很陌生。我所做的是使用 cv2.inRange() 函数创建一个掩码作为输出。现在,我尝试使用 (0, 0, 130) 和 (80, 80, 255) 之间的 GRB 颜色值来执行此操作,并考虑颜色在此范围内的每个像素为“红色”。所以我得到的输出有两种颜色:黑色和红色。然后我使用这个 numpy 函数来获取非零像素的数量,此时我期望它是红色像素的数量:red_pixel = np.count_nonzero(output)

完整代码如下:

import cv2 
import numpy as np

img_name = input("What's the name of the picture? ")


img = cv2.imread(img_name)

# boundaries for the color red
boundaries = [
([0, 0, 130], [80, 80, 255])
]

for(lower, upper) in boundaries:
# creates numpy array from boundaries
lower = np.array(lower, dtype = "uint8")
upper = np.array(upper, dtype = "uint8")

# finds colors in boundaries a applies a mask
mask = cv2.inRange(img, lower, upper)
output = cv2.bitwise_and(img, img, mask = mask)

# saves the image
cv2.imwrite('2'+img_name, output)

tot_pixel = output.size
red_pixel = np.count_nonzero(output)
percentage = round(red_pixel * 100 / tot_pixel, 2)

print("Red pixels: " + str(red_pixel))
print("Total pixels: " + str(tot_pixel))
print("Percentage of red pixels: " + str(percentage) + "%")

我用四张不同的图片测试了我的代码:

sea.jpg我预计其中红色含量为 0%。我运行该程序,作为输出,我得到一个全黑图像,百分比为 0.00。这很好。

我尝试了这个:

sample.jpg我运行该程序,得到的百分比是 13.76,我不知道它是否正确,但仍然可能是正确的。

然后我尝试了一个完全红色的图像:total-red.jpg我得到 100.00,这是正确的。

当我尝试使用这张图片时,奇怪的事情发生了: almost-red.png

我运行该程序得到的是以下输出: 2almost-red.png这正是我所期望的。非零像素的百分比为 33.07%我不知道为什么。

您能帮我弄清楚我做错了什么以及如何纠正该程序吗?非常感谢。

最佳答案

您的图像具有三个 channel 。在第三个示例几乎-red.png 中,只有一个 channel 在范围内。因此我们可以推断图像最多有 33% 在范围内。由于存在一些边界,因此它必须更少。 33.07% 听起来很合理。

如果您想检查每个像素的任何 channel 是否在范围内,您必须将三个 channel 相加,然后检查是否有非零条目。

关于python - 如何用OpenCV计算某种颜色的像素数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com