【问题标题】:How to find RGB value of a bounded region in an image using python?如何使用python在图像中查找有界区域的RGB值?
【发布时间】:2018-11-14 15:57:47
【问题描述】:

假设我有图像并且需要找到我在哪里绘制一个矩形,

cv2.rectangle(图像,(250,70),(150,45),(0,255,0),5)

在图片上?

如何在 cv/python 中找到这个矩形的特别值?

【问题讨论】:

  • 你是什么意思你想找到RGB值?有界区域将具有许多 RGB 值,这些值对应于有界区域中存在的许多像素。您是否尝试提取有界区域?
  • 因为我在图像中有很多颜色,我特别限定了紫色区域,我需要找到它的 RGB 值。就是这样。
  • 那么边界框中的区域将是一种纯色?
  • 是的,它暂时有任何颜色,我说的是紫色。我们可以在盒子上做任何这样的操作,特别是找到 RGB 值吗?

标签: python opencv image-processing computer-vision


【解决方案1】:

是的,可以提取边界框内区域的RGB值。

假设您使用 CV2 读取图像,则图像已经表示为 BGR。您所要做的就是在边界框中找到一个点并提取该点的 BGR 值。注意我使用的是 BGR,因为这就是 OpenCV 读取图像的方式。

使用您使用的边界框顶点,只需计算边界框中的一个中点,然后提取图像中该中点的 BGR 值。

# midpoint is ((y_max - y_min) // 2 + y_min, (x_max - x_min) // 2 + x_min)
point = ((70 - 45) // 2 + 45, (250 - 150) // 2 + 150)

b, g, r = image[point]

如果边界框中的像素颜色不同,则此方法将不起作用。在这种情况下,也许您想获得平均 BGR 值。

# image[y_min:y_max, x_min:x_max]
region = image[45:70, 150:250]

b, g, r = np.mean(region, axis=(0, 1))

【讨论】:

  • 嗨,我在这里遇到拼写错误。 b, g, r = image[point] TypeError: 'bool' object is not subscriptable
  • 您的 image 对象显然不是一个 numpy 矩阵。这是一个布尔值。你确定你没看错图片?它应该类似于image = cv2.imread('path/to/image.png')
  • 我做了,i=cv2.imread('path\image.jpg') im=cv2.resize(i,(1020,880)) op=cv2.rectangle(image,(250, 70),(150,45),(0,255,0),5) rgb=cv2.imwrite("doc.jpg",op) point = ((70 - 45) // 2 + 45, (250 - 150) // 2 + 150) b, g, r = rgb[point] # 这一行出错
  • cv2.imwrite 将返回一个布尔值。您要做的是b, g, r = im[point],其中im 是您调整大小的图像。从技术上讲,您甚至不需要边界框矩形代码,因为您只需要边界框的坐标。
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 2013-01-10
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多