OpenCV入门2——图像视频的加载与展示一些API
和之前从摄像头采集视频最大的区别是,要根据视频的fps来修改cv2.waitKey()里的值,如果你是22fps的视频,相当于1s走22帧,即1000ms走22帧,即一帧需要1000 / 22ms,而这个就是cv2.waitKey()里应该填的值。其中提到,cv2.waitKey()返回值是int类型,而ASCII码是8位(char),所以我们需要用key &0xff取它的低八位来实现,而ord函
文章目录
题目
D
OpenCV创建显示窗口
多看源码参考文档
import cv2
cv2.namedWindow('new', cv2.WINDOW_NORMAL)
cv2.imshow('new', 0)
key = cv2.waitKey(0)
if(key == 'q'):
exit()
cv2.destroyAllWindows()
import cv2
cv2.namedWindow('new', cv2.WINDOW_NORMAL)
cv2.resizeWindow('new', 1920, 1080)
cv2.imshow('new', 0)
key = cv2.waitKey(0)
if(key == 'q'):
exit()
cv2.destroyAllWindows()
OpenCV加载显示图片
import cv2
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
# cv2.resizeWindow('img', 1920, 1080)
img = cv2.imread('E://pic//mylove.jpg')
cv2.imshow('img', img)
key = cv2.waitKey(0)
if(key &0xff == ord('q')):
cv2.destroyAllWindows()
可以看官方文档
其中提到,cv2.waitKey()返回值是int类型,而ASCII码是8位(char),所以我们需要用key &0xff取它的低八位来实现,而ord函数是Python中的另一个内建函数,用于将字符转换为对应的ASCII码。
题目
B
OpenCV保存文件
import cv2
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
# cv2.resizeWindow('img', 1920, 1080)
img = cv2.imread('E://pic//mylove.jpg')
while True:
cv2.imshow('img', img)
key = cv2.waitKey(0)
if(key & 0xff == ord('q')):
break
elif(key & 0xff == ord('s')):
cv2.imwrite("E://pic//picc//mylove.png", img)
break
else:
print(key - 32)
cv2.destroyAllWindows()
利用OpenCV从摄像头采集视频
# -*- coding: utf-8 -*-
import cv2
# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)
# 获取视频设备
cap = cv2.VideoCapture(0)
while True:
# 从摄像头读取视频帧
ret, frame = cap.read()
# 将视频帧在窗口中显示
cv2.imshow('video', frame)
# 等待键盘事件,如果为q,退出
key = cv2.waitKey(1)
if(key & 0xff == ord('q')):
break
# 释放VideoCapture
cap.release()
cv2.destroyAllWindows()
从多媒体文件中读取视频帧
和之前从摄像头采集视频最大的区别是,要根据视频的fps来修改cv2.waitKey()里的值,如果你是22fps的视频,相当于1s走22帧,即1000ms走22帧,即一帧需要1000 / 22ms,而这个就是cv2.waitKey()里应该填的值
# -*- coding: utf-8 -*-
import cv2
# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)
# 获取视频设备/从视频文件中读取视频帧
# cap = cv2.VideoCapture(0)
cap = cv2.VideoCapture("E://DownloadPack//Video//particles.mp4")
while True:
# 从摄像头读取视频帧
ret, frame = cap.read()
# 将视频帧在窗口中显示
cv2.imshow('video', frame)
# 等待键盘事件,如果为q,退出
key = cv2.waitKey(40)
if(key & 0xff == ord('q')):
break
# 释放VideoCapture
cap.release()
cv2.destroyAllWindows()
将视频数据录制成多媒体文件
# -*- coding: utf-8 -*-
import cv2
# 创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
vw = cv2.VideoWriter('.//out.mp4', fourcc, 24, (1280, 720))
# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)
# 获取视频设备/从视频文件中读取视频帧
cap = cv2.VideoCapture(0)
# cap = cv2.VideoCapture("E://DownloadPack//Video//particles.mp4")
while True:
# 从摄像头读取视频帧
ret, frame = cap.read()
# 将视频帧在窗口中显示
cv2.imshow('video', frame)
# 写数据到多媒体文件
vw.write(frame)
# 等待键盘事件,如果为q,退出
key = cv2.waitKey(40)
if(key & 0xff == ord('q')):
break
# 释放VideoCapture
cap.release()
# 释放VideoWriter
vw.release()
cv2.destroyAllWindows()
# -*- coding: utf-8 -*-
import cv2
# 创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
vw = cv2.VideoWriter('.//out.mp4', fourcc, 24, (1280, 720))
# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)
# 获取视频设备/从视频文件中读取视频帧
cap = cv2.VideoCapture(0)
# cap = cv2.VideoCapture("E://DownloadPack//Video//particles.mp4")
# 判断摄像头是否为打开状态
while cap.isOpened():
# 从摄像头读取视频帧
ret, frame = cap.read()
if ret == True:
# 将视频帧在窗口中显示
cv2.imshow('video', frame)
# 重新将窗口设置为指定大小
cv2.resizeWindow('video', 640, 480)
# 写数据到多媒体文件
vw.write(frame)
# 等待键盘事件,如果为q,退出
key = cv2.waitKey(40)
if(key & 0xff == ord('q')):
break
else:
break;
# 释放VideoCapture
cap.release()
# 释放VideoWriter
vw.release()
cv2.destroyAllWindows()
题目——早起的鸟儿有虫吃
A
# -*- coding: utf-8 -*-
import numpy as np
import cv2
if __name__ == '__main__':
# 从视频文件中读取视频帧
cap = cv2.VideoCapture('particles.mp4')
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)
out = cv2.VideoWriter('particles_concat.mp4',
cv2.VideoWriter_fourcc(*'mp4v'),fps,(width*2, height))
i = 0
while(cap.isOpened()):
ret, frame = cap.read()
if frame is None:
break
# 0指的是关于x轴翻转
flip_frame = cv2.flip(frame, 0)
concat_frame = np.concatenate(
(frame, flip_frame),axis=1)
cv2.imshow('particles_concat_frame', concat_frame)
if i % 10 == 0:
out.write(concat_frame)
i += 1
if cv2.waitKey(1) & 0xFF == ord('q'):
break
out.release()
cap.release()
cv2.destroyAllWindows()
OpenCV控制鼠标
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):
print(event, x, y, flags, userdata)
# 创建窗口
cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse', 640, 360)
# 设置鼠标回调
cv2.setMouseCallback('mouse', mouse_callback, "666")
# 显示窗口和背景
img = np.zeros((360, 640, 3), np.uint8)
while True:
cv2.imshow('mouse', img)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):
break
cv2.destroyAllWindows()
关于np.uint8
OpenCV中的TrackBar控件
TrackBar的使用
OpenCV颜色空间默认BGR格式
# -*- coding: utf-8 -*-
import cv2
import numpy as np
def callback():
pass
# 创建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
# 创建trackbar
cv2.createTrackbar('R', 'trackbar', 31, 255, callback)
cv2.createTrackbar('G', 'trackbar', 24, 255, callback)
cv2.createTrackbar('B', 'trackbar', 0, 255, callback)
# 创建一个背景图片
img = np.zeros((480, 640, 3), np.uint8)
while True:
# 获取当前trackbar的值
r = cv2.getTrackbarPos('R', 'trackbar')
g = cv2.getTrackbarPos('G', 'trackbar')
b = cv2.getTrackbarPos('B', 'trackbar')
# 改变背景图片颜色
img[:] = [b, g, r]
cv2.imshow('trackbar', img)
key = cv2.waitKey(10)
if key & 0xff == ord('q'):
break
cv2.destroyAllWindows()
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)