图像读取、显示、截取、全黑处理、粘贴、复制—opencv实战1
【代码】图像的读取与显示—test00。
·
import cv2 as cv # 导入OpenCV库,别名cv(行业通用写法)
import matplotlib.pyplot as plt # 导入绘图库,用于显示图像(与OpenCV互补),OpenCV用BGR,matplotlib用RGB,必须转换
import numpy as np # 导入数值计算库,图像在Python中本质= numpy数组(矩阵) ,所有操作都靠numpy
print(cv.getVersionString()) # 打印OpenCV版本号,getVersionString() 是OpenCV内置函数,返回字符串格式版本号
image = cv.imread("long.jpg") # 读取彩色图像,转为numpy多维数组(矩阵);图片必须和.py文件同文件夹,否则写完整路径;读取失败会返回None,不会报错
cv.imshow("image", image) # OpenCV窗口显示原图;imshow = image show;参数1:窗口名;参数2:要显示的图像矩阵
cv.waitKey(0) # 等待按键;让窗口停留,等待键盘输入;参数0:无限等待,按任意键继续执行
print(image.shape) # 查看图像形状;输出 (高度, 宽度, 通道数)
# 彩色图 = 3通道 → B、G、R
# shape输出格式:(高, 宽, 3)
# 灰度图 = 1通道 → shape输出:(高, 宽)
img = cv.cvtColor(image, cv.COLOR_BGR2RGB) # cvtColor = convert color 颜色转换;cv.COLOR_BGR2RGB:把OpenCV默认的BGR通道 → 转为matplotlib需要的RGB通道
plt.imshow(img) # 将RGB图像传给matplotlib;把图像数据加载到内存
plt.show() # 把图像画出来,弹出窗口显示图片
image1 = cv.imread("long.jpg", cv.IMREAD_GRAYSCALE) # 以灰度模式读取图像;cv.IMREAD_GRAYSCALE:强制以灰度图读取
print(image1.shape) # 查看灰度图形状;输出:(高, 宽)
plt.imshow(image1, cmap='gray') # matplotlib显示灰度图;cmap:colormap 颜色映射表/配色方案
plt.show()
roi = image[100:200, 100:200, :] # 截取ROI感兴趣区域;图像是numpy三维矩阵 [行, 列, 通道];行:高度方向 100~200;列:宽度方向 100~200;: 表示取所有通道(BGR全部保留); ROI = Region of Interest 图片局部区域
blank = np.zeros_like(image) # 创建和原图一样大小的全黑图;zeros_like:创建一个形状、数据类型与image完全相同,但全是0的矩阵;0在图像中=黑色;255=白色
blank[100:200, 100:200, :] = roi # 将ROI粘贴到黑色图上;把截取的区域 赋值 给黑色图的相同位置;numpy数组赋值操作,覆盖对应位置像素
#blank[100:200, 100:200, :] = roi.copy() 修改blank,原roi不会变!!!
cv.imshow("blank", blank) # 显示黑色底+ROI的图
cv.waitKey(0)
h, w, c = image.shape # 解包原图的 高、宽、通道数
blank1 = np.zeros((h, w, c), dtype=np.uint8) # np.zeros:生成一个指定形状、所有元素都为 0 的 NumPy 数组;数据类型;dtype=np.uint8:必须写!图像像素值只能是 0~255 的整数
cv.imshow("blank1", blank1) # 手动创建黑色图
cv.waitKey(0)
blank2 = np.copy(image) # 复制图像,新建独立数组,修改blank2不会改变原image
cv.imshow("blank2", blank2)
cv.waitKey(0)
blank3 = image # 直接赋值,只是起别名,修改blank3,原image也会跟着变!!!
cv.imshow("blank3", blank3)
cv.waitKey(0)
cv.destroyAllWindows() # 按完键后,关闭所有OpenCV窗口;释放内存,不写会导致窗口卡死
更多推荐
所有评论(0)