python利用opencv从视频中保存图片
时间: 2023-10-10 12:11:15 浏览: 81
使用OpenCV库可以方便地从视频中截取并保存图片。下面是一个简单的Python代码示例:
```python
import cv2
# 打开视频文件
cap = cv2.VideoCapture('video.mp4')
# 设定帧数,即每秒钟显示多少张图片
fps = cap.get(cv2.CAP_PROP_FPS)
# 读取视频文件中的每一帧图片
while(cap.isOpened()):
ret, frame = cap.read()
if ret == False:
break
# 显示当前帧图片并保存
cv2.imshow('frame', frame)
cv2.imwrite('frame.jpg', frame)
# 按下q退出
if cv2.waitKey(int(1000/fps)) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
```
在上面的代码中,首先打开视频文件,并设置每秒钟需要显示多少张图片。然后使用循环读取视频文件中的每一帧图片,并在每一帧图片上显示出来并保存为一个文件。最后,按下q键退出循环,释放资源并关闭窗口。
相关问题
Python 利用opencv对jpg图片进行循环拼接
下面是一个基于 OpenCV 的循环拼接图片的示例代码:
```python
import cv2
import os
# 定义图片文件夹路径和拼接后图片保存路径
img_folder = 'images/'
result_path = 'result.jpg'
# 读取所有图片
img_files = [f for f in os.listdir(img_folder) if f.endswith('.jpg')]
imgs = [cv2.imread(os.path.join(img_folder, f)) for f in img_files]
# 计算拼接后图片的宽度和高度
height, width, channels = imgs[0].shape
for img in imgs[1:]:
h, w, c = img.shape
height = max(height, h)
width += w
# 创建拼接后图片的空白画布
result = np.zeros((height, width, channels), dtype=np.uint8)
# 依次将每张图片拼接到空白画布上
x_offset = 0
for img in imgs:
h, w, c = img.shape
result[0:h, x_offset:x_offset+w] = img
x_offset += w
# 保存拼接后图片
cv2.imwrite(result_path, result)
```
代码中,首先定义了图片文件夹路径和拼接后图片保存路径。然后,使用 `os.listdir` 函数获取图片文件夹中所有的图片文件名,并使用列表推导式读取所有图片。接着,计算拼接后图片的宽度和高度,并创建一个空白的画布。最后,依次将每张图片拼接到空白画布上,并保存拼接后的图片。
你可以根据自己的需求调整代码中的参数,实现不同的效果。例如,调整图片文件夹路径、拼接后图片保存路径、图片格式等。
利用python和opencv批量去掉图片黑边
可以通过以下步骤批量去掉图片黑边:
1. 导入opencv库和os库
```python
import cv2
import os
```
2. 定义函数,用于去掉图片黑边
```python
def remove_black_edge(image_path, save_path):
# 读取图片
img = cv2.imread(image_path)
# 将图片转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
# 寻找最大轮廓
max_area = 0
contour_index = 0
for index in range(len(contours)):
contour = contours[index]
area = cv2.contourArea(contour)
if area > max_area:
max_area = area
contour_index = index
# 获取最大轮廓的矩形框
x, y, w, h = cv2.boundingRect(contours[contour_index])
# 裁剪图片
img_cropped = img[y:y+h, x:x+w]
# 保存图片
cv2.imwrite(save_path, img_cropped)
```
3. 循环遍历文件夹中的图片,调用函数去掉黑边并保存
```python
# 图片所在文件夹路径
folder_path = "path/to/folder"
# 遍历文件夹中的所有图片
for filename in os.listdir(folder_path):
if filename.endswith(".jpg") or filename.endswith(".png"):
# 图片路径
image_path = os.path.join(folder_path, filename)
# 去掉黑边后保存的路径
save_path = os.path.join(folder_path, "no_black_edge_" + filename)
# 去掉黑边并保存
remove_black_edge(image_path, save_path)
```
以上就是利用python和opencv批量去掉图片黑边的方法。
阅读全文