Image 使用图像掩蔽的像素提取?

Image 使用图像掩蔽的像素提取?,image,numpy,opencv,Image,Numpy,Opencv,我有两张照片。 我想提取由各自颜色标记的区域中的像素。(黄色和红色像素的正态分布) 我知道opencv支持按位操作,但我只看到它是用黑/白掩码实现的 我考虑过使用np.where(),我很好奇是否有更好的解决方案?您可以像这样计算红色/黄色像素的数量: #!/usr/bin/env python3 import cv2 import numpy as np # Load image im = cv2.imread('abYaj.png') # Make mask of red pixe

我有两张照片。

我想提取由各自颜色标记的区域中的像素。(黄色和红色像素的正态分布)

我知道opencv支持按位操作,但我只看到它是用黑/白掩码实现的


我考虑过使用np.where(),我很好奇是否有更好的解决方案?

您可以像这样计算红色/黄色像素的数量:

#!/usr/bin/env python3

import cv2
import numpy as np

# Load image
im = cv2.imread('abYaj.png')

# Make mask of red pixels - True where red, false elsewhere
redMask = (im[:, :, 0:3] == [0,0,255]).all(2)

# Count red pixels
redTotal = np.count_nonzero(redMask)            # redTotal=44158

# Make mask of yellow pixels
yellowMask = (im[:, :, 0:3] == [0,255,255]).all(2)

# Count yellow pixels
yellowTotal = np.count_nonzero(yellowMask)      # yellowTotal=356636

或者,您可以在终端中使用ImageMagick对它们进行计数,而不编写任何代码:

magick identify -verbose abYag.png

Image:
  Filename: abYaj.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 1024x1024+0+0
  Units: Undefined
  Colorspace: sRGB
  ...
  ...
  Colors: 3
  Histogram:
    647782: (0,0,0,0) #00000000 none
    44158: (255,0,0,255) #FF0000FF red             <--- HERE
    356636: (255,255,0,255) #FFFF00FF yellow       <--- HERE
  Rendering intent: Perceptual
  ...
  ...
magick-identify-verbose abYag.png
图片:
文件名:abYaj.png
格式:PNG(便携式网络图形)
Mime类型:图像/png
类别:DirectClass
几何图形:1024x1024+0+0
单位:未定义
色彩空间:sRGB
...
...
颜色:3
直方图:
647782:(0,0,0,0)#00000000无

44158:(255,0,0255)#FF0000FF red您可以这样计算红色/黄色像素的数量:

#!/usr/bin/env python3

import cv2
import numpy as np

# Load image
im = cv2.imread('abYaj.png')

# Make mask of red pixels - True where red, false elsewhere
redMask = (im[:, :, 0:3] == [0,0,255]).all(2)

# Count red pixels
redTotal = np.count_nonzero(redMask)            # redTotal=44158

# Make mask of yellow pixels
yellowMask = (im[:, :, 0:3] == [0,255,255]).all(2)

# Count yellow pixels
yellowTotal = np.count_nonzero(yellowMask)      # yellowTotal=356636

或者,您可以在终端中使用ImageMagick对它们进行计数,而不编写任何代码:

magick identify -verbose abYag.png

Image:
  Filename: abYaj.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 1024x1024+0+0
  Units: Undefined
  Colorspace: sRGB
  ...
  ...
  Colors: 3
  Histogram:
    647782: (0,0,0,0) #00000000 none
    44158: (255,0,0,255) #FF0000FF red             <--- HERE
    356636: (255,255,0,255) #FFFF00FF yellow       <--- HERE
  Rendering intent: Perceptual
  ...
  ...
magick-identify-verbose abYag.png
图片:
文件名:abYaj.png
格式:PNG(便携式网络图形)
Mime类型:图像/png
类别:DirectClass
几何图形:1024x1024+0+0
单位:未定义
色彩空间:sRGB
...
...
颜色:3
直方图:
647782:(0,0,0,0)#00000000无

44158:(255,0,0255)#FF0000FF red您希望得到什么样的答案?用黄色遮罩的像素的平均值?用红色遮罩的像素数?用红色/黄色遮罩的区域中的像素数请问您希望得到什么样的答案?用黄色遮罩的像素的平均值?用红色遮罩的像素数?用红色/黄色遮罩的区域中的像素数谢谢你的回答。不过,我应该更清楚地表达我的问题。看起来你在计算“遮罩”中黄色/红色像素的数量。我想用这些颜色来选择原始图像中的“感兴趣区域”。如中所示,用黄色/红色斑点标记的区域内包含哪些像素。这正是我要求您澄清所需内容时您在评论中所回答的!如果你想对原始图像中的像素做些什么,你可以用我设计的遮罩对它们进行排序,因为我的遮罩在每个像素位置都是布尔真/假。你能解释一下如何对元组(RGB)执行按位排序和排序,因为原始图像就是这样表示的吗?我知道opencv提供了这个函数,但我假设您必须以某种方式将元组映射到整数?原始图像怎么可能是元组?您使用的是OpenCV,它将图像存储为Numpy数组,在您的问题中请参考
np.where()
。请明确说明你想要的答案。谢谢。我正在读这样的图片。img=cv2.imread(名称、颜色)。因为每个像素有三个通道,所以它是一个元组是有意义的?打印出img会得到类似于[[255255]、[255255]…]的结果。我想知道如何使用上面的图像和掩码执行按位和。谢谢你的回答。不过,我应该更清楚地表达我的问题。看起来你在计算“遮罩”中黄色/红色像素的数量。我想用这些颜色来选择原始图像中的“感兴趣区域”。如中所示,用黄色/红色斑点标记的区域内包含哪些像素。这正是我要求您澄清所需内容时您在评论中所回答的!如果你想对原始图像中的像素做些什么,你可以用我设计的遮罩对它们进行排序,因为我的遮罩在每个像素位置都是布尔真/假。你能解释一下如何对元组(RGB)执行按位排序和排序,因为原始图像就是这样表示的吗?我知道opencv提供了这个函数,但我假设您必须以某种方式将元组映射到整数?原始图像怎么可能是元组?您使用的是OpenCV,它将图像存储为Numpy数组,在您的问题中请参考
np.where()
。请明确说明你想要的答案。谢谢。我正在读这样的图片。img=cv2.imread(名称、颜色)。因为每个像素有三个通道,所以它是一个元组是有意义的?打印出img会得到类似于[[255255]、[255255]…]的结果。我想知道如何使用上面的图像和掩码执行按位和。非常感谢。