目录
一.创建一个窗口,显示图片
import cv2
img_path = "src/fengjing.jpg" # 自己的图片路径
img = cv2.imread(img_path) # 读取图片
# 创建一个可调大小的窗口
cv2.namedWindow("meijing", cv2.WINDOW_NORMAL)
# 调整窗口的尺寸
cv2.resizeWindow("meijing", 800, 600) # 设置窗口大小为 800x600
# 显示图像
cv2.imshow("meijing", img)
# 等待用户按键按下,0表示无限等待
while True:
key = cv2.waitKey(0)
if key == ord('q'):
print("quit")
break
#按下s保存图片
elif key==ord('s'): #这里需要转换为ascii码对比
print("save")
cv2.imwrite("src/meijing1.jpg", img)
break
else:
print("key:", key)
#释放资源
cv2.destroyAllWindows()
二.显示摄像头/多媒体文件
import cv2
#创建窗口
cv2.namedWindow("Live Video",cv2.WINDOW_NORMAL)
#从摄像头中读取视频流
cap1=cv2.VideoCapture(0)
#从多媒体文件中读取视频流 我把视频文件放在了当前工程src文件夹下
cap2=cv2.VideoCapture("src/zlyBrithday.mp4")
while True:
#读取视频流,这里自己选择cap1或cap2
ret,frame=cap2.read()
#如果读取成功
if ret:
#显示视频流
cv2.imshow("Live Video",frame)
#设置延迟,避免视频速度太快
key = cv2.waitKey(20)
if key == ord('q'):
break
#释放资源
cap1.release()
cap2.release()
cv2.destroyAllWindows()
三.把摄像头录取到的视频存储在本地
import cv2
#创建窗口
cv2.namedWindow("window", cv2.WINDOW_NORMAL)
cv2.resizeWindow("window", 800, 600)
//获取摄像头
cap = cv2.VideoCapture(0)
#这里比较关键,如果参数不符合摄像头视频的要求,则无法正常保存写入,所以一般不使用自己输入的参数
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
#注意类型组合
fourcc = cv2.videoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('src/output.avi', fourcc, fps, (width, height))
#如果摄像头是打开的
while cap.isOpened():
ret, frame = cap.read()
if ret == True:
cv2.imshow("window", frame)
out.write(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
四.鼠标回调事件
import cv2
import numpy as np
#鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):
print(event, x, y, flags, userdata)
#创建窗口
cv2.namedWindow('MyWindow', cv2.WINDOW_NORMAL)
cv2.resizeWindow('MyWindow', 640, 480)
#绑定鼠标回调
cv2.setMouseCallback('MyWindow', mouse_callback, 'hello opencv!')
#注意这里参数和窗口相反
img = np.zeros((480, 640, 3), np.uint8)
while True:
cv2.imshow('MyWindow', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
五.TrackBar滑动条
import cv2
import numpy as np
def callback():
pass
#创建窗口
cv2.namedWindow("TrackBar",cv2.WINDOW_NORMAL)
cv2.resizeWindow("TrackBar",480,640)
#创建滑动条
cv2.createTrackbar("R","TrackBar",0,255,callback)
cv2.createTrackbar("G","TrackBar",0,255,callback)
cv2.createTrackbar("B","TrackBar",0,255,callback)
img = np.zeros((640,480,3),np.uint8)
while True:
r=cv2.getTrackbarPos("R","TrackBar")
g=cv2.getTrackbarPos("G","TrackBar")
b=cv2.getTrackbarPos("B","TrackBar")
img[:]=[b,g,r] #设置BGR颜色
cv2.imshow("TrackBar", img)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
效果: