python-OpenCV 将数组转换成灰度图和彩图

本文介绍了一种使用Python生成随机字节并将其转换为灰度和RGB图像的方法。首先利用os.urandom()生成随机字节,然后使用numpy将这些字节转换为数组,并通过reshape调整数组形状以匹配所需图像尺寸。最后,利用OpenCV显示生成的图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要步骤

1.生成普通python数组(bytearray(),os.urandom())
2.转换成numpy数组(numpy.array())
3.通过reshape将数组转换到所需的维数
4.以图像的形式显示出来(cv.imshow())

代码

import os

import cv2 as cv
import numpy as np



# Make an array of 120000 random bytes
randomByteArray = bytearray(os.urandom(120000))
# translate into numpy array
flatNumpyArray = np.array(randomByteArray)
# Convert the array to make a 400*300 grayscale image(灰度图像)
grayImage = flatNumpyArray.reshape(300, 400)
# show gray image
cv.imshow('GrayImage', grayImage)
# print image's array
print(grayImage)
cv.waitKey()

# byte array translate into RGB image
randomByteArray1 = bytearray(os.urandom(360000))
flatNumpyArray1 = np.array(randomByteArray1)
BGRimage = flatNumpyArray1.reshape(300,400,3)
cv.imshow('BGRimage', BGRimage)
cv.waitKey()
cv.destroyAllWindows()

效果 

 

### 使用 Python OpenCV 创建图像 #### 创建空白图像 要创建一个新的图像,可以利用 NumPy 库来初始化一个全零数组表示纯黑背景的图片。对于彩色图像是三维数组 (height, width, channels),而灰度图则是二维数组 (height, width)[^4]。 ```python import cv2 import numpy as np # 创建一个3x3像素大小、单通道(即灰度)且数据类型为无符号8位整数的全黑图像 img_black_square = np.zeros((3, 3), dtype=np.uint8) # 显示图像尺寸形状 print(f"Image shape: {img_black_square.shape}") ``` #### 构建具有特定模式的灰阶图像 为了构建更复杂的图案,比如渐变效果或其他自定义设计,则可以通过循环结构修改上述基础矩阵中的数值实现不同亮度级别的分布[^3]。 ```python # 定义16×16网格内每个单元格填充对应位置计算所得的颜色值 img_gradient = np.zeros((256, 256), np.uint8) for row in range(0, 16): for col in range(0, 16): color_value = int(row * 16 + col) img_gradient[row*16:(row+1)*16, col*16:(col+1)*16] = color_value # 将生成的结果保存到文件中以便查看 cv2.imwrite('gradient_image.jpg', img_gradient) ``` #### 添加颜色信息至图像 如果希望得到的是带有色彩而非仅限于黑白两色的画面,在创建时就需要指定额外的一个维度用于存储RGB三个分量的信息;另外也可以先建立好灰度版本再转换成彩图形式[^2]。 ```python # 初始化一张白色底板的BGR三通道彩色图像 white_canvas_bgr = 255 * np.ones([200, 200, 3], "uint8") # 或者从现有的灰度图像出发转为伪彩色显示 color_mapped_img = cv2.applyColorMap(img_gradient, colormap=cv2.COLORMAP_JET) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值