图像格式:
读写图像灰度变换
import cv2
import numpy as np
# 读入图像
img = cv2.imread('image\h.jpg')
cv2.imshow('name',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 读入图像转换为灰度图像
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 彩色转灰度的公式
# Gray = R * 0.299 + G * 0.587 + B*0.114
# cv2.imread()读取的图片格式是BGR
bImg,gImg,rImg = cv2.split(img) # 拆分为BGR独立通道
Graying = np.zeros_like(bImg,dtype = 'uint8') # 创建与bImg相同形状的黑色图像
Graying = (np.uint8)rImg*0.299 + gImg*0.587 + bImg * 0.114 # 转换成整数
cv2.imshow('Grayimg',Graying)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
# 读入图像
img = cv2.imread('img\h.png')
cv2.imshow('name',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
target_size = (400,200) #(宽,高)
img_scale = cv2.resize(img,target_size)
cv2.imshow('name',img_scale)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:在使用cv2.imread()读取RGB图像时,得到的array的shape是(高,宽)。
但是在使用cv2.resize()时,第二个参数是输出图像的(宽,高)
显示视频
import cv2
import matplotlib.pyplot as plt
import numpy as np
v = cv2.VideoCapture('video/tian.mp4')
if v.isOpen():
open.frame = v.read()
else:
open = False
while open:
re,frame = v.read()
if frame is None:
break
if re == True:
# 把每一帧图片变为灰色
frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# 截取图片中的一小块
frame = frame[500:800,500:800]
# 改变图片->视频尺寸
frame = cv2.resize(frame,(400,200))
# 按比例压缩图片
frame = cv2.resize(frame,(0,0),fx=0.4,fy=0.8)
cv2.imshow('result',frame)
if cv2.waitKey(10) && 0xFF == 27:
break
v.release()
cv2.destroyAllWindows()
色彩通道划分
函数cv2.split()将3通道BGR彩色图像分离为B、G、R单通道图像。
函数cv2.merge()将单通道合并成一个3通道图像。
import cv2
import numpy as np
img1 = cv2.imread('image/girl.webp',flags=1) #flags=1 读取彩色图像
cv2.imshow('girl',img1)
cv2.waitKey(0)
cv2.destroyAllWindows() # 释放所有窗口
cv2.imread()所读取的图像格式:每个像素为[B,G,R]格式。
cv2.imshow()显示图像:按图像中每个像素为[B,G,R]的规则将图像显示出来。
# BGR通道拆分
ch1,ch2,ch3 = cv2.split(img1)
print(img1.shape,ch1.shape,ch2.shape,ch3.shape)
cv2.imshow('ch1',ch1)
cv2.imshow('ch2',ch2)
cv2.imshow('ch3',ch3)
cv2.waitKey(0)
cv2.destroyAllWindows()
mergeImg = cv2.merge([ch1,ch2,ch3])
cv2.imshow('mergeImg',mergeImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 但是matplotlib是根据RGB画的
from matplotlib import pyplot as plt
plt.imshow(mergeImg)
显示BGR各个通道
import cv2
import numpy as np
img1 = cv2.imread('image/girl.webp',falgs=1)
ch1,ch2,ch3 = cv2.split(img1)
## 方法1,数组赋值
imgZeros = np.zeros_like(img1) # 创建与img1形状相同的黑色图像
SysImg = imgZeros
SysImg[:,:,0] = ch1 #在黑色图像模板添加B色分量
SysImg[:,:,1] = ch2
SysImg[:,:,2] = ch3
cv2.imshow("image",SysImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
只用一个通道的数据
import cv2
import numpy as np
img1 = cv2.imread('image/girl.webp',flags=1)
bImg,gImg,rImg = cv2.split(img1)
method = 3
if method == 1:
imgZeros = np.zeros_like(img1)
BImg = imgZeros
Bimg[:,:,0] = bImg
elif method == 2:
zeros = np.zeros(img1.shape[:2],dtype='uint8')
print(img1.shape,zeros.shape)
BImg = cv2.merge([bImg,zeros,zeros])
else:
zeros = np.zeros(bImg.shape,dtype="uint8")
BImg = np.stack([BImg,zeros,zeros],axis=2)
cv2.imshow('channel B',BImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
matplot_show
# 读取是RGB
from matplotlib import image as mping
from matplotlib import pyplot as plt
img1 = mping.imread('image/girl.webp')
plt.imshow(img1)
import cv2
cv2.imshow("CV2show",img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 把RGB转换为BGR
img2 = cv2.cvtColor(img1,cv2.COLOR_RGB2BGR)
cv2.imshow("image",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
ch1,ch2,ch3 = cv2.split(img1)
imgZeros = np.zeros_like(img1)
imgZeros[:,:,0] = ch3
imgZeros[:,:,1] = ch2
imgZeros[:,:,3] = ch1
cv2.imshow("channe l", SysImg)
cv2.waitKey(0)
cv2.destroyAllWindows() # 释放所有窗口