一、操作灰度图
实验目的:实现灰度图颜色值的循环递增
相关代码
numpy.zeros(shape, dtype=float, order='C')
参数说明
- shape:数组的形状,可以是一个整数,表示创建一个一维数组;也可以是一个整数元组,表示创建一个多维数组。
- dtype:可选参数,指定数组的数据类型,默认为 float。
- order:可选参数,指定数组在内存中的存储顺序,默认为 'C',即按行存储。
测试代码
import cv2
import numpy as np
img = np.zeros((460, 680), dtype=np.uint8) # 创建一副高460,宽680的单通道黑色图
n = 0 # 初始化n
while True:
cv2.imshow('GrayImg', img) # 在GrayImg窗口显示图片img
n += 20
img[:, :] = n # 图像全高和全宽的颜色值改为n
print(img[1, 1]) # 打印图片颜色值
key = cv2.waitKey(1000)
if key == 27 or 255 - 20 < n: # 设置退出循环条件
break
cv2.destroyAllWindows() # 关闭所有窗口
总结
为什么要使用numpy.zeros()创建numpy数组的方式创建黑色图片?
- opencv中图片是个numpy数组
- opencv中图片数组的数据类型可以是uint8、float32,这里使用np.uint8是因为要指定像素值的范围。np.uint8表示无符号8位整数,其范围为 0 到 255,0表示黑色,255表示白色。
- zeros表示创建的数组的元素值为0
二、操作彩图
前提需知
关于img[h1:h2,w1:w2,c]的分析
图像的shape有HWC三个属性(高/宽;长;通道数),img[h1:h2,w1:w2,c]就是对应这三个属性
img[h1:h2,w1;w2,c] 表示图像 高h1至h2,长w1至w2的范围
img[:h2,w1;,c] 表示图像 高0至h2,长w1至图像最长处的范围
img[:,;,c] 表示图像 全高,全长的范围
实验目的:创建一副彩图,上中下三部分分别为蓝绿红,之后每隔1s轮换区域颜色
测试代码
# 创建一副彩色图像,上中下依次为蓝、绿、红,且每隔一秒轮换一次
import cv2
import numpy as np
img = np.zeros((450, 680, 3), np.uint8) # 创建3通道的黑色图片
# 3通道彩图的通道顺序为bgr,img[:,:,0]这里调用的是img图片的b通道
a0 = 0
a1 = 1
a2 = 2
while True:
img[:150, :, a0] = 255 # 将图片高:0-150区域的b通道初始像素值改为255,显示蓝色
img[150:300, :, a1] = 255 # 将图片高:150-300区域的g通道初始像素值改为255,显示绿色
img[300:, :, a2] = 255 # 将图片高:300-680区域的r通道初始像素值改为255,显示红色
cv2.imshow('ColorImg', img) # 显示图片
key = cv2.waitKey(1000) # 等待1秒
img[:, :, :] = 0 # 将图片变为黑色,重置
# 改变a0、a1、a2的值,即可改变对应的通道
temp = a2
a2 = a1
a1 = a0
a0 = temp
if key == 27:
break
cv2.destroyAllWindows()
总结
一张3通道彩图中的通道顺序是bgr,0代表b(蓝)通道;1代表g(绿)通道;2代表r(红)通道
具体例子请参考:http://t.csdnimg.cn/gGmQL
2023/07/25/17:40
OpenCV学习笔记,这个点吃饭要紧!