视频处理概念
视频信号(以下简称为视频)是非常重要的视觉信息来源,它是视觉处理中经常要处理的一类信号。视频由一系列图像构成的,这一系列图像被称为帧,帧是以固定时间间隔从视频中获取的。获取帧的速度称为帧速率,其单位通常使用“帧/秒”表示,如果从视频中提取出独立的帧,就可以使用图像处理的方法对其进行处理,达到处理视频的目的。
OpenCV提供了cv2.VideoCapture类和cv2.VideoWriter类来支持各种类型的视频文件。在不同的操作系统中,它们支持的文件类型可能有所不同,但是在各种操作系统中均支持VAI格式的视频文件
VideoCapture
常用函数包括初始化、打开、帧捕获、释放、属性设置等。
提供了构造函数cv2.VideoCapture(),用于打开摄像头并完成摄像头的初始化工作
捕获对象=cv2.VideoCapture(“摄像头ID号”)
要使用摄像头,需要使用cv2.VideoCapture(0)创建VideoCapture对象,参数0指的是摄像头的编号,如果你电脑上有两个摄像头的话,访问第2个摄像头就可以传入1,依此类推
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
ret, frame = cap.read()
frame1=cv2.flip(frame,1)
gray=cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
canny=cv2.Canny(gray,80,150)
cv2.imshow('frame', canny)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
def meiyan(img):
rows, cols = img.shape[:2]
dst = np.zeros((rows, cols, 3), dtype="uint8")
for i in range(rows):
for j in range(cols):
B = 0.272*img[i,j][2] + 0.534*img[i,j][1] + 0.131*img[i,j][0]
G = 0.349*img[i,j][2] + 0.686*img[i,j][1] + 0.168*img[i,j][0]
R = 0.393*img[i,j][2] + 0.769*img[i,j][1] + 0.189*img[i,j][0]
if B>255:
B = 255
if G>255:
G = 255
if R>255:
R = 255
dst[i,j] = np.uint8((B, G, R))
return dst
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
width, height = cap.get(3), cap.get(4)
while(cap.isOpened()):
ret, frame = cap.read()
frame = meiyan(frame)
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
print(width, height)
视频处理
import cv2
cap = cv2.VideoCapture('caruav.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
frame=cv2.Canny(frame,100,200)
cv2.imshow('frame', frame)
if cv2.waitKey(25) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
import cv2
import numpy as np
lowerb_hsv = np.array([156,43,46])
upperb_hsv = np.array([180,255,255])
cap = cv2.VideoCapture('redone.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lowerb_hsv, upperb_hsv)
redball = cv2.bitwise_and(frame,frame,mask=mask)
cv2.imshow('frame', redball)
if cv2.waitKey(25) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
import cv2
capture = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'FMP4')
outfile = cv2.VideoWriter('output1.mp4', fourcc, 25, (640, 480))
while(capture.isOpened()):
ret, frame = capture.read()
if ret:
outfile.write(frame) # 写入文件
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
else:
break
capture.release()
outfile.release()
cv2.destroyAllWindows()