`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 类型确保了颜色值的正确解释,并且绘制的圆将是蓝色的。

目录
相关文章
|
6月前
|
Python
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
|
计算机视觉 Python
【opencv】图像数据类型由numpy转为tensor后颜色改变
【opencv】图像数据类型由numpy转为tensor后颜色改变
311 1
【opencv】图像数据类型由numpy转为tensor后颜色改变
|
数据处理 计算机视觉 Python
应用matplotlib的imshow函数显示彩色图像(RGB data)报错的解决方法
而且,只在处理彩色图像时出现错误提示,显示为空白图像;处理灰度图像时函数运行正常、显示图像。
545 0
|
Python
numpy重新学习系列(11)---如何用np.linspace生成等间距的N个数字
numpy重新学习系列(11)---如何用np.linspace生成等间距的N个数字
243 0
numpy重新学习系列(11)---如何用np.linspace生成等间距的N个数字
|
Python
numpy重新学习系列(5)---如何用np.zeros_like创建一个新的和原来array形状一样的,但是元素为0的新的array
numpy重新学习系列(5)---如何用np.zeros_like创建一个新的和原来array形状一样的,但是元素为0的新的array
133 0
numpy重新学习系列(5)---如何用np.zeros_like创建一个新的和原来array形状一样的,但是元素为0的新的array
|
机器学习/深度学习 数据可视化
【解决方案】成功解决将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()]
|
Python
numpy重新学习系列(4)---如何用np.zeros创建填充元素为0的array
numpy重新学习系列(4)---如何用np.zeros创建填充元素为0的array
117 0
|
Python
【Numpy总结】第二节:Numpy 的属性与形状变换
在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions),维度的数量称为秩(rank);比如说,二维数组相当于是两个一维数组,即 二维数组有两个轴,秩为2 。 <font color=blue > 重点:很多时候可以声明 axis。 axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作; axis=1,表示沿着第 1 轴进行操作,即对每一行进行操作。
127 0
【Numpy总结】第二节:Numpy 的属性与形状变换