【问题标题】:Get RGB value opencv python获取RGB值opencv python
【发布时间】:2012-08-24 14:51:53
【问题描述】:

我正在将图像加载到 python 中,例如

image = cv2.imread("new_image.jpg")

如何获取image的RGB值?

【问题讨论】:

  • 确实如此,但如果我想访问图像 rgb 值,该怎么做?
  • 它是从 0x000000 到 0xFFFFFF 的范围吗?您可能需要将其转换为十六进制以具有可识别的颜色...然后从中获取每个 r,g,b 值(它可能是 0.0-1.0 的范围,在这种情况下乘以 0xFFFFFF(最大 RGB Hex )
  • OpenCV 拥有出色的tutorials
  • @RoryLester 您可以使用cv2.cvtColor(image, cv2.COLOR_BGR2YCbCr) 轻松转换您的图像,而且效率可能更高。

标签: python opencv computer-vision


【解决方案1】:

你可以的

image[y, x, c]

或等同于image[y][x][c]

它将返回x,y,c 坐标中的像素值。请注意,索引从0 开始。因此,如果您想访问第三个 BGR(注意:不是 RGB)组件,则必须执行 image[y, x, 2] 其中 yx 是所需的行和列。

此外,您可以通过键入 dir(<variable>) 来获取 Python 中对给定对象可用的方法。比如加载image后,运行dir(image),你会得到一些有用的命令:

“cumprod”、“cumsum”、“数据”、“对角线”、“点”、“dtype”、“转储”、“转储”、“填充”、 'flags','flat','flatten','getfield','imag','item','itemset','itemsize', “最大”、“平均”、“最小”、...

用法:image.mean()

【讨论】:

  • image[x, y, z] 也可以,因为这只是一个 numpy 数组。
  • 谢谢。我想问一下,我正在将图像从 rgb 转换为 ycbcr,并且我正在循环每个像素并相应地更改它。这个过程非常密集,即使在 200x200 的小图像上也需要几秒钟。是否有另一种方法来提高性能?也许你知道。
  • 我认为NumPy可以通过dot(a,b)进行矩阵乘法。也许你可以使用它而不是访问每个元素。
  • 我遇到了很多麻烦 - 结果我的图像的 x 和 y 值被颠倒了。我最终不得不以image[y][x] 访问像素值。
  • @Chris,我刚刚更改了它。颠倒xy 的约定非常具有误导性……谢谢您指出这一点!
【解决方案2】:

使用opencv在Python中获取像素的B G R颜色值

import cv2
image = cv2.imread("sample.jpg")
color = int(image[300, 300])
# if image type is b g r, then b g r value will be displayed.
# if image is gray then color intensity will be displayed.
print color

输出: [73 89 102]

【讨论】:

  • 现在返回TypeError: only size-1 arrays can be converted to Python scalars
【解决方案3】:

它对我很有效:

import cv2 
import numpy as np  

cap = cv2.imread('/home/PATH/TO/IMAGE/IMG_0835.jpg')
#You're free to do a resize or not, just for the example
cap = cv2.resize(cap, (340,480))
for x in range (0,340,1):
    for y in range(0,480,1):
        color = cap[y,x]
        print color`

【讨论】:

    【解决方案4】:

    你可以使用 numpy 更好地将图像转换为numpy数组并转置矩阵 [R G B] 将是 [B G R],反之亦然

    【讨论】:

      【解决方案5】:

      此代码将打印像素 300、300 的红色、绿色和蓝色值:

      img1 = cv2.imread('Image.png', cv2.IMREAD_UNCHANGED)
      b,g,r = (img1[300, 300])
      print (r)
      print (g)
      print (b)
      

      【讨论】:

        【解决方案6】:

        我认为获取图像 RGB 的最简单方法是使用 cv2.imshow("windowName",image)。 图像会以窗口形式显示,小信息栏还会在图像下方显示坐标 (x,y) 和 RGB。喜欢this picture。您可以使用鼠标查看您想要的任何像素的 RGB。

        代码示例:

        import cv2
        
        image = cv2.imread("new_image.jpg")
        try:
            cv2.imshow("windowName",image)
            cv2.waitKey(0)
        except:
            print("No this image")
        

        【讨论】:

          猜你喜欢
          • 2014-12-09
          • 1970-01-01
          • 2013-09-12
          • 2020-02-29
          • 1970-01-01
          • 2020-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多