以下为本人在学习博主盼小辉OpenCV系列教程时的粗略笔记,供自己复习备忘使用。
目录
一 加载图像
import cv2
img = cv2.imread('anime.png')
此时img即为一个表示图像的numpy数组,例如img[120,45,2]代表x=45,y=120像素处绿色通道的像素强度。
二 BGR转换RGB
1.使用cv2.split方法分离b,g,r三个通道,再通过cv2.merge方法按r,g,b顺序融合为新图像
b,g,r = cv2.split(img)
img_rgb = cv2.merge([r,g,b])
2.手动切片分离
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
img_rgb = cv2.merge([r,g,b])
3.使用numpy数组处理方法直接将BGR数组倒置为RGB
img_rgb = img[:, :, ::-1]
4.直接使用cv2.cvtColor(image, cv2.COLOR_BGR2RGB)进行转换
三 彩色与灰度图像的加载
gray_img = cv2.imread('anime.png', cv2.IMREAD_GRAYSCALE)
只需在cv2.imshow函数中填入第二个可选参数即可,不填时默认加载彩色图像
四 图像信息的读取
- img.shape 行、列和通道的数量(如果图像是彩色的)
- img.size 图像的大小(图像高度 × 图像宽度 × 图像通道数)
五 访问图像某一区域
可以使用切片选取,如:
top_left_corner = img[0:50, 0:50]
六 展示图片的两种方法:
1.使用opencv自带方法展示:
cv2.imshow('img_bgr',img)
cv2.imshow('img_rgb',img_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
此方法会根据图像大小确定窗口大小,对于高分辨率图像展示出来会很大
2.使用matplotlib库进行展示:
from matplotlib import pyplot as plt
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(img_rgb)
plt.show()
其中plt.subplot用于确定放置图像的位置。
七 拼接图像
可以使用numpy的concatenate方法,第一个参数传入要连接的图像元组,第二个参数指定连接的方向
img_concats = np.concatenate((img,img_rgb),axis=1)
八 本次学习实例代码:
import cv2 # 导入OpenCV库,用于图像处理
from matplotlib import pyplot as plt # 导入matplotlib的pyplot模块,用于绘图
import numpy as np # 导入numpy库,用于数组和矩阵操作
# 读取名为'anime.png'的图像文件
img = cv2.imread('anime.png')
# 从图像中分离出蓝色、绿色和红色通道(注意:OpenCV默认使用BGR顺序)
# b,g,r = cv2.split(img) # 这行代码也可以达到相同的目的
b = img[:,:,0] # 获取蓝色通道
g = img[:,:,1] # 获取绿色通道
r = img[:,:,2] # 获取红色通道
# 打印蓝色通道的数据(通常不这样做,因为数据量很大,但这里为了示例)
print(b)
# 将分离的红色、绿色、蓝色通道重新合并成RGB图像
# 注意:由于OpenCV默认使用BGR,所以这里直接合并会得到错误的颜色顺序,但这里故意这么做为了展示
img_rgb = cv2.merge([r,g,b]) # 这将产生一个与原始图像颜色不同的图像(因为颜色通道顺序被改变了)
# 使用matplotlib显示原始BGR图像和“错误”的RGB图像
plt.subplot(1,2,1) # 创建一个1行2列的子图,并激活第一个
plt.imshow(img) # 显示原始BGR图像
plt.subplot(1,2,2) # 激活第二个子图
plt.imshow(img_rgb) # 显示错误顺序的RGB图像(应为BGR)
plt.show() # 显示所有子图
# 使用OpenCV的imshow函数显示原始BGR图像和错误顺序的RGB图像
cv2.imshow('img_bgr',img) # 显示原始BGR图像
cv2.imshow('img_rgb',img_rgb) # 显示错误顺序的RGB图像(在OpenCV中看起来颜色也是错误的)
cv2.waitKey(0) # 等待任意键按下
cv2.destroyAllWindows() # 关闭所有OpenCV创建的窗口
# 将原始BGR图像和错误顺序的RGB图像在水平方向上拼接
img_concats = np.concatenate((img,img_rgb),axis=1)
# 使用OpenCV显示拼接后的图像
cv2.imshow('imgconcats',img_concats)
cv2.waitKey(0) # 等待任意键按下
cv2.destroyAllWindows() # 关闭窗口
九 演示过程图:
继续加油~