《Bug系列 1》:cv2画图和matplotlib画图之间的RGBA颜色差异

一、问题

1.1 RGB和RGBA的区别

  在日常的画图中,我们一般会使用RGB或者RGBA作为颜色编码格式。

RGB=(Red,Green,Blue)=(红色,绿色,蓝色)
RGBA=(Red,Green,Blue,alpha)=(红色,绿色,蓝色,透明度)

  RGBA有两种格式,两者之间是可以通过除以255或者乘以255来相互转化。
  1:0-255之间的,例如(255, 0, 0, 255)
  2:0-1之间的,例如(1, 0, 0, 1)。

1.2 Cv2包和matplotlib的颜色差异

使用相同的RGB值,Cv2包和matplotlib包画出来的图形的颜色不一样。使用代码进行测试如下。

import cv2
import numpy as np
import matplotlib.pyplot as plt

# cv2画图
cv2_RGBA = (255, 0, 0, 255)
img = np.zeros((1000, 1000, 3))
img[:, :, :] = 255
cv2.circle(img=img, center=(500, 500), color=cv2_RGBA, radius=20, thickness=-1)
cv2.imwrite("./cv2_img.PNG", img)

# plt画图
plt_RGBA = (1, 0, 0, 1)
fig, ax = plt.subplots()
plt.scatter(x=1, y=1, c=plt_RGBA, s=100)
plt.axis("off")
plt.savefig("plt_img.PNG")

结果如下图所示,我们可以看出相同的RGBA值画出来的图像颜色却不一样。

图1 cv2画图结果
图2 plt画图结果
# 二、答案 综上,可以得出一个结论:cv2包和matplotlib包画图时用的RGBA的红色通道和蓝色通道是相反的。所以,要使得cv2包和matplotlib包画出来的图像具有相同的颜色要将红色通道和蓝色通道继续换一下位置如:
cv2_RGBA = (255, 0, 0, 255)
matplotlib_RGBA = (0, 0, 1, 1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值