【问题标题】:Opencv2 and python - cv2 detects different RGB valuesOpencv2 和 python - cv2 检测不同的 RGB 值
【发布时间】:2017-05-18 02:53:39
【问题描述】:

我正在用特定颜色 (RGB) 绘制一条线,然后在 Python 中使用 opencv2 加载图像并将 BGR 转换为 RGB。

不幸的是,我从 opencv2 得到的数组的 RGB 值略有不同。

我使用 Illustrator 还是 Paint 都没关系。 JPG、PNG、BMP 或 TIF。颜色总是在 +- 1 到 40 之间变化。

这是我的代码:

import numpy as np
import cv2

src = cv2.imread("test.jpg")
image = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)
print(image[10, 10])

我的输入是 RGB 值 [100 50 0] 的正方形,我得到的是 [95 46 0],但我需要准确的 RGB 值。

【问题讨论】:

  • 如果您想要精确的值,请尝试使用无损格式,如 PNG 或 TIFF。
  • 正如我已经写过的,我使用了 JPG、TIFF、PNG 和 BMP。没有区别。
  • 你能分享你创建的文件吗?最好是PNG格式吗?也许它有一个 OpenCV 忽略的 coour 配置文件。
  • fs5.directupload.net/images/170104/aerv3qua.png 给定值 [100 50 0] 我得到 [98 52 14]
  • 我怀疑 ImageReady 正在对您的图像进行色彩管理。我只使用 Photoshop,而不使用 ImageReady,但我认为您需要找到一个名为 Color Management 的选项并确保将其设置为 off。它可能在Assign Color Profile 或类似位置附近。

标签: python python-3.x opencv colors rgb


【解决方案1】:

这取决于您保存输入的方式,无论您使用的是哪个程序。我尝试使用图像编辑程序打开您的示例图像,并且值与我从 OpenCV 中的代码中获得的值相同。

尝试像下面这样保存输入,然后使用您的代码重新读取。如果仍然不同,那么我们可以认为问题与imreadcvtColor 有关。 A、B 和 C 处的值必须相同。还要确保以无损格式保存。

import cv2
import numpy as np

# Create a constant image
img = np.ones((15,15,3))
img[:,:,0]=100
img[:,:,1]=50
img[:,:,2]=0
# Check the desired value = A
print(img[10,10])
# Save the image
cv2.imwrite("input.png",img)

# Read back the image
src=cv2.imread("input.png", cv2.IMREAD_COLOR)
# Check the desired value = B
print(src[10,10])

# Convert the image
image = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)
# Check the desired value = C
print(image[10, 10])

【讨论】:

    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多