当前位置: 首页 > 面试题库 >

使用OpenCV计算Python中图像中黑色像素的数量

鲁波光
2023-03-14
问题内容

我在Python中具有以下测试代码以读取,设置阈值和显示图像:

import cv2
import numpy as np 
from matplotlib import pyplot as plt

# read image
img = cv2.imread('slice-309.png',0)
ret,thresh = cv2.threshold(img,0,230, cv2.THRESH_BINARY)
height, width = img.shape
print "height and width : ",height, width
size = img.size
print "size of the image in number of pixels", size

# plot the binary image
imgplot = plt.imshow(img, 'gray')
plt.show()

我想计算带有特定标签(例如黑色)的图像内像素的数量。我怎样才能做到这一点 ?我看了OpenCV的教程,但没有找到任何帮助:-(

谢谢!


问题答案:

对于黑色图像,您将获得像素总数(行*列),然后从得出的结果中减去它cv2.countNonZero(mat)

对于其他值,您可以创建一个遮罩,该遮罩cv2.inRange()用于返回显示所需颜色/标签/值的所有位置的二进制遮罩,然后用于cv2.countNonZero计算其中的多少。

更新(每Miki的评论):

当尝试查找具有特定值的元素计数时,Python允许您跳过cv2.inRange()调用并执行以下操作:

cv2.countNonZero(img == scalar_value)


 类似资料:
  • 问题内容: 我正在尝试从图像中提取红色。我有应用阈值的代码,仅保留指定范围内的值: 但是,正如我检查的那样,红色的色相值可以在0到10的范围内,也可以在170到180的范围内。因此,我想保留这两个范围中任何一个的色相值。我尝试将阈值从10设置为170并使用函数,但随后我也获得了所有白色。我认为最好的选择是为每个范围创建一个遮罩并同时使用它们,因此我必须以某种方式将它们合并在一起,然后再继续。 有没

  • 在OpenCV python中,假设我们用cv2.imread读取一个图像,并得到一个BGR numpy数组。接下来我们使用cv2.inrange命令生成一个掩码。掩模具有相同的宽度/高度,并且每个掩模像素要么是黑色的,要么是白色的。 我必须先将掩码转换成BGR图像吗?如果是,怎么做? 编辑:我不想像在将蒙版应用到彩色图像中那样将整个蒙版应用到图像上。另一种表达我所想要的方式:将面具视为一个黑白图

  • 本文向大家介绍在Python中使用OpenCV将彩色图像灰度化,包括了在Python中使用OpenCV将彩色图像灰度化的使用技巧和注意事项,需要的朋友参考一下 在Python中,我们可以使用一个名为cv2的OpenCV库。Python不包含cv2,因此我们需要单独安装它。 对于Windows: 对于Linux: 在下面给出的程序中,我们使用以下三个功能: imread(): 它将图像文件的绝对路径

  • 问题内容: 如何将灰度OpenCV图像转换为黑白图像?我看到已经提出了类似的问题,但是我使用的是OpenCV 2.3,建议的解决方案似乎不再起作用。 我正在尝试将灰度图像转换为黑白图像,以便不是绝对黑色的任何东西都是白色,并将其用作surf.detect()的蒙版,以便忽略在黑色蒙版区域边缘上找到的关键点。 下面的Python几乎可以解决我的问题,但是发送到Threshold()的阈值似乎没有任何

  • 问题内容: 我想加载彩色图像,将其转换为灰度,然后反转文件中的数据。 我需要的是:遍历OpenCV中的数组并使用此公式更改每个值(这可能是错误的,但对我来说似乎很合理): 但我不明白为什么它不起作用: 我不想做一个显式循环(我想变得更pythonic)。我可以看到,在一张具有白色背景的图像中,它变成了黑色,但是仅此而已,就好像其他颜色并没有太大变化(如果有)。 问题答案: 您几乎做到了。由于您是一

  • 本文向大家介绍在Python中使用OpenCV裁剪图像,包括了在Python中使用OpenCV裁剪图像的使用技巧和注意事项,需要的朋友参考一下 什么是裁剪? 裁剪是从摄影或插图图像中去除不需要的外部区域。该过程通常包括去除图像的某些外围区域,以从图片中去除多余的垃圾,改善其取景,改变纵横比,或使主题与背景突出或分离。 我们将使用 OpenCV-python (cv2)的这些函数, imread()