opencv python在視屏上截圖

介紹

因爲我是一個小白,所以代碼就比較簡單,如果有錯誤,希望大家可以評論下告訴我,感激。

效果

藍色框框是我們要截下的圖
在這裏插入圖片描述
這是截完後的圖
在這裏插入圖片描述

代碼

import cv2
import numpy as np
import matplotlib.pyplot as plt
i = w = h = f1 = f2 = ew = eh = 0

def cut(event, x, y, flags, param):
    global i,w,h, f1,f2,ew,eh
    img = 0
    #這一個if的作用是,當鼠標左鍵按下,記錄開始的位置
    if event == cv2.EVENT_LBUTTONDOWN:
        f1 = 1
        h = x
        w = y
        print("w = ", w, "h = ", h)
    #這一步的作用是當鼠標滑動時,並且左鍵是按下的時候,就畫一個框框,並且記錄左後一個位置
    if event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
        img = frame.copy()
        cv2.rectangle(img, (h,w), (x,y), (255,0,0),5)
        cv2.imshow("frame", img)
        f2 = 1
        eh = x
        ew = y
    #當執行了以上的兩步時候,並且左鍵是鬆開的,就可以進行截出一張圖片。
    if f1 == 1 and f2 == 1 and event == cv2.EVENT_LBUTTONUP:
        #下面兩個if是向各個方向上截圖的考慮
        if ew < w:
            w,ew = ew,w
        if eh < h:
            eh,h = h, eh
        i += 1
        f1 = f2 = 0
        img = frame[w:ew, h:eh]
        path = "C:/test2/" + "%d"%i+".jpg"
        cv2.imwrite(path,img)
#這時創建一個對像
cap = cv2.VideoCapture("C:/test2/bbb.mp4")
#這是命名一個窗口,與下面的鼠標結合,鼠標會在這個窗口中產生效果
cv2.namedWindow("frame",cv2.WINDOW_NORMAL)
cv2.setMouseCallback("frame",cut)
while True:
	#讀取圖片
    ret, frame = cap.read()
    if ret == False:
        break
    cv2.imshow("frame", frame)
    #如果輸入'c',就進行切割。
    if cv2.waitKey(10) == ord("c"):
        cv2.waitKey(0)
    if cv2.waitKey(10) == ord('q'):
        break

注意

x,y和 w,h, 的不同,x 代表的圖像的列,y是代表着行
frame[w:ew, h:eh]這個先是行,再是列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章