目錄
一.創建一個窗口,顯示圖片
二.顯示攝像頭/多媒體文件
三.把攝像頭錄取到的視頻存儲在本地
四.鼠標回調事件
五.TrackBar滑動條
一.創建一個窗口,顯示圖片
import cv2img_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)breakelse: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或cap2ret,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'):breakcap.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'):breakcv2.destroyAllWindows()
效果: