opencv从摄像头获取图片并压缩保存,逐步解释代码
时间: 2023-05-27 18:03:50 浏览: 148
Python基于opencv调用摄像头获取个人图片的实现方法
下面是使用OpenCV从摄像头获取图片并压缩保存的代码,并附有解释:
```python
import cv2
# 定义摄像机索引
camera_index = 0
# 创建VideoCapture对象,打开摄像机
cap = cv2.VideoCapture(camera_index)
# 设置摄像机属性
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
# 定义保存图片的路径和文件名
save_path = "./"
file_name = "test.jpg"
# 循环获取摄像机每一帧图片
while True:
# 读取摄像机当前帧图片
ret, frame = cap.read()
# 等待按下键盘上的Q键退出循环
if cv2.waitKey(1) & 0xFF == ord("q"):
break
# 创建一个JPEG编码器
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
# 对帧图片进行压缩编码
result, imgencode = cv2.imencode(".jpg", frame, encode_param)
# 将图片字节流保存为文件
with open(save_path + file_name, "wb") as f:
f.write(imgencode)
# 释放摄像机
cap.release()
# 关闭所有OpenCV窗口
cv2.destroyAllWindows()
```
解释:
1. 导入OpenCV库
```python
import cv2
```
2. 定义摄像机索引,camera_index为0表示打开默认的视频设备(通常是摄像头)
```python
camera_index = 0
```
3. 创建VideoCapture对象,打开摄像机
```python
cap = cv2.VideoCapture(camera_index)
```
4. 设置摄像机属性,如图片宽度和高度
```python
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
```
5. 定义保存图片的路径和文件名
```python
save_path = "./"
file_name = "test.jpg"
```
6. 循环获取摄像机每一帧图片,直到按下键盘上的Q键退出循环
```python
while True:
# 读取摄像机当前帧图片
ret, frame = cap.read()
# 等待按下键盘上的Q键退出循环
if cv2.waitKey(1) & 0xFF == ord("q"):
break
# 对帧图片进行处理和操作
```
7. 创建一个JPEG编码器
```python
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
```
8. 对帧图片进行压缩编码
```python
result, imgencode = cv2.imencode(".jpg", frame, encode_param)
```
9. 将图片字节流保存为文件
```python
with open(save_path + file_name, "wb") as f:
f.write(imgencode)
```
10. 释放摄像机资源
```python
cap.release()
```
11. 关闭所有OpenCV窗口
```python
cv2.destroyAllWindows()
```
阅读全文