【问题标题】:Cannot get correct pixel color image python无法获得正确的像素彩色图像python
【发布时间】:2017-05-30 03:28:37
【问题描述】:

我在 MacOS 上使用 OpenCV 3,我正在尝试获取图像中像素的 RGB 值。

例如,我使用的是以下图片:

我制作了一个程序,可以检测用户在图像中的点击,并使用点击的 x、y 坐标输出 RGB 颜色,但显然当我点击圆圈的某些区域时,我得到了一个不正确的值。例如:当我在蓝色圆圈内点击时,假设在图像的点(177,340)上,它输出的值是(255,255,255),这肯定是不正确的。

但是当我向右或向左单击一点时,它会输出正确的值:(17, 51, 225)。整个图像都会发生这种情况,

我怀疑是与比例有关的东西,然后我只是在python上打开图像并使用以下代码获取像素的值:

import cv2
import numpy as np

img = cv2.imread('circles.jpg', 1)
print(img[177,340])

但是,我得到的是这样的:

array([255, 255, 255], dtype=uint8)

我怀疑这与我不知道的坐标系有关。有人可以帮我解决一下吗?

提前致谢。

【问题讨论】:

  • 请注意,在 OpenCV 上 X 从左侧开始,Y 从顶部开始。
  • 您正在以 img[row, col] 的形式访问 RGB 值,row 从上到下,col 从左到右。但是,当您在图像上单击鼠标时,它是一个 (x, y) 点,x 从左到右,y 从上到下。交换 row 和 col 或 x 和 y,应该可以解决问题。
  • 如果您在应用程序中实际使用实体图形(而不是真实照片),请务必考虑使用 PNG 或 GIF 格式而不是 JPEG,因为 JPEG 会因有损而引入各种问题。跨度>

标签: python image opencv numpy


【解决方案1】:

我将点 [177,340] 用洋红色 (255,0,255) 绘制到您的图像上,如下代码所示。

image[175:179,338:342] = (255,0,255) # enlarge a bit for easy viewing

图像中清楚地显示该点位于白色背景中。

很可能,您将(row,col) 错误地编码为(col,row),这样您就得到了颜色[17,51,225],即图像中的“橙色和最大的圆圈”,而不是[244,70,18],即“蓝色圆圈”。

【讨论】:

  • 就是这样,我正在逐列更改行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 2015-11-07
相关资源
最近更新 更多