本文持续更新中…
说明
这篇博文使用的是教材《opencv 3计算机视觉 Python语言实现》,仅作为笔记参考
1 基本输入输出
1.1读,写图像文件;灰度图;显示图片;
将图像存为灰度图
import cv2
img = cv2.imread(r'C:\Users\Lenovo\Desktop\water_drop.jpg',cv2.IMREAD_GRAYSCALE) #读取为灰度图
cv2.imwrite(r'C:\Users\Lenovo\Desktop\water_drop.png',img) #保存为.png图片
原图
保存后的图
直接读取为灰度图
上面我们读取读灰度图的方法是:第二个参数为cv2.IMREAD_GRAYSCALE; 总结如下:
- cv2.IMREAD_COLOR: 加载原图,没有透明度(即透明度为0),这是默认参数
- cv2.IMREAD_GRAYSCALE :图片设置为灰度图模式
- cv2.IMREAD_UNCHANGED:图片包含alpha通道
上面三点分别可以通过1,0,-1代替。如灰度图为0
img = cv2.imread(r'C:\Users\Lenovo\Desktop\2.png',0)
显示图片
图片可以通过cv2.imshow()显示,但可能会一闪而过,随时消失(笔者遇到的是图片一直无法显示,终端还被迫中断)
import cv2
img = cv2.imread(r'C:\Users\wudl\Desktop\1.png') #读取图片
cv2.imshow('myimg',img) #显示图片
于是在上面的代码上增加如下部分
import cv2
img = cv2.imread(r'C:\Users\wudl\Desktop\1.png') #读取图片
cv2.imshow('myimg',img)
cv2.waitKey()
cv2.destroyAllWindows()
最后两行是用来保证显示窗口一直更新。
1.2 生成随机图像
import numpy as np
import cv2
img2 = np.random.randint(0,256,size=(300,400)) #范围是[0,256)的整数
img3 = img2.reshape(100,400,3) #三维BGR图
cv2.imwrite(r'C:\Users\Lenovo\Desktop\random_img.png',img2)
cv2.imwrite(r'C:\Users\Lenovo\Desktop\random_img1.png',img3)
1.3将图片去掉某一色调
图片是BGR的三维顺序,原图如下
现在要去掉绿色
img4 = cv2.imread(r'C:\Users\Lenovo\Desktop\1.png')
img4[:,:,1] = 0 #将绿色G设置为0,这里0,1,2分别对于BGR
cv2.imshow('myimg',img4)
1.4视频文件读写
OpenCV提供VideoCapture类读取视频以及VideoWriter类写视频。视频的每一帧通过VideoCapture类下的read()函数获取,每一帧都是BGR图片。
假如事先有一个名为myinput.avi的视频(opencv默认输出视频格式为avi)
import cv2
videoCapture = cv2.VideoCapture(r'F:\course\English\meeting\myinput.avi') #输入视频
fps = videoCapture.get(cv2.CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))) #获取帧的高宽
videoWriter = cv2.VideoWriter('myoutput.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size) #输出名和格式
success, frame = videoCapture.read()
while success:
videoWriter.write(frame)
success, frame = videoCapture.read() #当success为False结束while循环
# print(success,frame) 验证最后输出的success
执行之后保存的视频为myoutput.avi,如果我们执行了最后一句,会发现success,frame在视频结束时为False和None。
补充:
fps是每秒帧数,即帧速度,frame per second的简写
1.5捕获摄像头的帧
通过以下代码会自动打开摄像头并拍摄10秒视频
import cv2
cameraCapture = cv2.VideoCapture(0)
fps = 30
size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter = cv2.VideoWriter('myoutput.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)
success, frame = cameraCapture.read()
numFramesRemaining = 10*fps -1
while success and numFramesRemaining > 0:
videoWriter.write(frame)
success, frame = cameraCapture.read()
numFramesRemaining -=1
cameraCapture.release()