import cv2 # 从摄像头中取得视频 cap = cv2.VideoCapture(0) # 获取视频播放界面长宽 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH) + 0.5) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT) + 0.5) # 指定编码 fourcc = cv2.VideoWriter_fourcc(*'mp4v') #视频的输出格式 out = cv2.VideoWriter('./output.mp4', fourcc, 10, (width, height)) while(cap.isOpened()): #读取帧摄像头 ret:返回布尔值 frame:返回每一帧 ret, frame = cap.read() #print(frame.shape) if ret == True: #翻转每一帧 resultFrame = cv2.flip(frame,1) if len(resultFrame.shape)==1 : gray = cv2.cvtColor(resultFrame,cv2.COLOR_BAYER_BG2GRAY) else: gray = resultFrame face_cascade = cv2.CascadeClassifier(r'haarcascade_frontalface_default.xml') face = face_cascade.detectMultiScale(gray,1.3,5) if len(face)>0: li = [] li = face[0] cut = resultFrame[li[1]:li[1]+li[2],li[0]:li[0]+li[3]] shp = cut.shape img_dog = cv2.imread('./img/dog.jpg') img_dog = cv2.resize(img_dog, (shp[0], shp[1])) resultFrame[li[1]:li[1] + li[2], li[0]:li[0] + li[3]] = img_dog else: pass out.write(resultFrame) cv2.imshow('My Camera',resultFrame) #键盘按 Q 退出 if (cv2.waitKey(1) & 0xFF) == ord('q'): break else: break # 释放资源 out.release() cap.release() cv2.destroyAllWindows()分析一下每一步的含义
时间: 2024-04-26 15:20:38 浏览: 162
这段代码使用 OpenCV 库来从摄像头中获取视频,并实时进行人脸识别和狗脸替换。以下是每个步骤的含义:
1. 导入 OpenCV 库
2. 从摄像头中获取视频,获取视频的宽度和高度,并指定视频的输出格式。
3. 进入 while 循环,循环读取每一帧图像。
4. 对每一帧进行翻转,将其水平翻转。
5. 对翻转后的帧进行人脸检测,使用 Haar 级联分类器进行检测。
6. 如果检测到人脸,则将人脸部分裁剪出来,并将其大小与预先准备好的狗脸图像相同。
7. 将裁剪出来的人脸部分替换为狗脸图像。
8. 将处理过的帧写入输出视频中,并在窗口中显示处理后的帧。
9. 如果按下 'q' 键,则退出循环。
10. 释放资源,包括输出视频、摄像头和窗口。
相关问题
python cv2.puttext 根据视频的长宽,在右上角,增加文字
可以使用OpenCV的putText函数在视频的右上角增加文字。首先需要获取视频的长宽,然后确定文字的位置,最后使用putText函数增加文字。
以下是一个示例代码:
```python
import cv2
# 读取视频
cap = cv2.VideoCapture('video.mp4')
# 获取视频的长宽
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 定义文字内容和位置
text = 'Hello World!'
org = (width - 200, 50) # 右上角
while True:
ret, frame = cap.read()
if ret:
# 在视频帧上增加文字
cv2.putText(frame, text, org, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
# 显示视频帧
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
```
在上面的代码中,我们首先使用`cv2.VideoCapture`函数读取视频,然后使用`cap.get`函数获取视频的长宽。接着,我们定义了要显示的文字内容和位置,这里我们将文字显示在视频的右上角。在每一帧视频上,我们使用`cv2.putText`函数将文字增加到视频帧中。最后,我们使用`cv2.imshow`函数显示视频帧,并等待用户按下`q`键退出程序。
输入视频路径获取视频长宽python opencv
在Python中,使用OpenCV库可以很容易地获取视频文件的长度(帧数)和每一帧的宽度和高度。以下是一个简单的例子:
```python
import cv2
def get_video_info(video_path):
# 读取视频
cap = cv2.VideoCapture(video_path)
# 检查是否成功打开
if not cap.isOpened():
print(f"无法打开视频文件: {video_path}")
return None
# 获取视频的基本信息
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 帧宽
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 帧高
fps = cap.get(cv2.CAP_PROP_FPS) # 帧率
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # 总帧数
# 关闭视频流
cap.release()
return width, height, fps, frame_count
# 示例
video_path = 'path_to_your_video.mp4'
width, height, fps, frames = get_video_info(video_path)
if width and height:
print(f"Video Information: Width: {width}, Height: {height}, FPS: {fps}, Total Frames: {frames}")
阅读全文