`np.ones()` 颜色解释

简介: `np.ones()` 颜色解释

在OpenCV中,如果你使用 np.ones() 创建了一个灰度图像(二维数组),并使用 cv2.circle() 函数绘制一个圆,而没有指定 dtype,NumPy 默认会创建一个浮点类型的数组,其值的范围是 1.0 到 1.0。当你在这样的数组上绘制时,任何非零的值都会被OpenCV解释为白色(或最亮的颜色)。

然而,你使用的是颜色 (0, 0, 255),这在RGB图像中代表蓝色。但是,由于 magic_board 是一个灰度图像(二维数组),OpenCV会将这个颜色映射到灰度值上。在这种情况下,颜色的每个分量 (0, 0, 255) 会被分别映射到一个灰度值上。由于灰度图像只有一个颜色通道,它将使用这三个分量中的最小值作为灰度值,这就是0。

这里是你代码中相关部分的解释:

magic_board = np.ones((200, 200))  # 创建一个灰度图像,所有值为1.0
cv2.circle(magic_board, (22, 22), 11, (0, 0, 255), -1)  # 在图像上绘制一个圆
  • np.ones((200, 200)) 创建了一个200x200像素的灰度图像,其中所有像素的灰度值为1.0。
  • cv2.circle() 函数在图像上绘制一个圆。由于 magic_board 是一个灰度图像,颜色 (0, 0, 255) 中的每个分量 (0, 0, 255) 被映射到一个灰度值上。由于使用了 -1 作为半径参数,这表示填充整个圆,而圆的颜色由 (0, 0, 255) 决定。在灰度图像中,颜色分量 (0, 0, 255) 将被映射为0(红色分量为0,绿色通道也为0,蓝色分量为255,但因为是灰度图,所以只取最小的颜色分量值作为灰度值)。

因此,如果你看到的是一个黑色的实心圆,这实际上是因为灰度值被设置为0,而0在灰度图像中代表黑色。

要修正这个问题,确保 magic_board 是 uint8 类型,并且如果你想要一个蓝色的圆,你需要使用一个包含三个通道的彩色图像。这里是如何修改代码:

import cv2
import numpy as np

# 创建一个200x200的彩色图像,初始为灰色
magic_board = np.ones((200, 200, 3), dtype=np.uint8) * 255

# 在彩色图像上绘制一个蓝色的圆
cv2.circle(magic_board, (22, 22), 11, (0, 0, 255), -1)

cv2.imshow("img", magic_board)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个修改后的代码中,magic_board 是一个形状为 (200, 200, 3) 的彩色图像,每个像素由三个颜色通道的值组成,并且所有像素初始为白色(255, 255, 255)。使用 np.uint8 类型确保了颜色值的正确解释,并且绘制的圆将是蓝色的。

目录
相关文章
|
3月前
|
Python
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
|
4月前
|
存储 人工智能 搜索推荐
R语言Ternary包绘制三元图、RGB三色空间分布图的方法
R语言Ternary包绘制三元图、RGB三色空间分布图的方法
124 1
|
4月前
|
存储 计算机视觉 索引
OpenCV中确定像素位置及获取、修改像素BGR值讲解及演示(Python实现 附源码)
OpenCV中确定像素位置及获取、修改像素BGR值讲解及演示(Python实现 附源码)
157 0
|
数据处理 计算机视觉 Python
应用matplotlib的imshow函数显示彩色图像(RGB data)报错的解决方法
而且,只在处理彩色图像时出现错误提示,显示为空白图像;处理灰度图像时函数运行正常、显示图像。
461 0
|
计算机视觉 Python
【opencv】图像数据类型由numpy转为tensor后颜色改变
【opencv】图像数据类型由numpy转为tensor后颜色改变
278 1
【opencv】图像数据类型由numpy转为tensor后颜色改变
|
机器学习/深度学习 数据可视化
【解决方案】成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名。
【解决方案】成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
python 绘制箱型图(boxplot)时如何去掉出现的连续散点
python 绘制箱型图(boxplot)时如何去掉出现的连续散点
python 绘制箱型图(boxplot)时如何去掉出现的连续散点
python绘图——绘制正负区分的柱形图[ax.bar()]
python绘图——绘制正负区分的柱形图[ax.bar()]
python绘图——绘制正负区分的柱形图[ax.bar()]
|
API Python
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
为什么要用 ax ,而不是 plt 呢? 因为在绘制子图过程中,对于每一个子图的不同设置,ax 可以直接实现对于单个子图的设定,因此掌握必要的 ax 设置命令尤为重要!
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
python 绘制所有线条、散点等 可用的标记符号(marker)
python 绘制所有线条、散点等 可用的标记符号(marker)
python 绘制所有线条、散点等 可用的标记符号(marker)