opencv python在視屏上截圖功能的實(shí)現(xiàn)
OpenCV簡介
OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法。OpenCV用C++語言編寫,它的主要接口也是C++語言,但是依然保留了大量的C語言接口。該庫也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。這些語言的API接口函數(shù)可以通過在線文檔獲得。如今也提供對(duì)于C#、Ch、Ruby,GO的支持。所有新的開發(fā)和算法都是用C++接口。一個(gè)使用CUDA的GPU接口也于2010年9月開始實(shí)現(xiàn)。
介紹
因?yàn)槲沂且粋€(gè)小白,所以代碼就比較簡單,如果有錯(cuò)誤,希望大家可以評(píng)論下告訴我,感激。
效果
藍(lán)色框框是我們要截下的圖
這是截完后的圖
代碼
import cv2import numpy as npimport matplotlib.pyplot as plti = w = h = f1 = f2 = ew = eh = 0def cut(event, x, y, flags, param): global i,w,h, f1,f2,ew,eh img = 0 #這一個(gè)if的作用是,當(dāng)鼠標(biāo)左鍵按下,記錄開始的位置 if event == cv2.EVENT_LBUTTONDOWN: f1 = 1 h = x w = y print('w = ', w, 'h = ', h) #這一步的作用是當(dāng)鼠標(biāo)滑動(dòng)時(shí),并且左鍵是按下的時(shí)候,就畫一個(gè)框框,并且記錄左后一個(gè)位置 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 #當(dāng)執(zhí)行了以上的兩步時(shí)候,并且左鍵是松開的,就可以進(jìn)行截出一張圖片。 if f1 == 1 and f2 == 1 and event == cv2.EVENT_LBUTTONUP: #下面兩個(gè)if是向各個(gè)方向上截圖的考慮 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)#這時(shí)創(chuàng)建一個(gè)對(duì)像cap = cv2.VideoCapture('C:/test2/bbb.mp4')#這是命名一個(gè)窗口,與下面的鼠標(biāo)結(jié)合,鼠標(biāo)會(huì)在這個(gè)窗口中產(chǎn)生效果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’,就進(jìn)行切割。 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]這個(gè)先是行,再是列。
總結(jié)
到此這篇關(guān)于opencv python在視屏上截圖的文章就介紹到這了,更多相關(guān)opencv 視屏截圖內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. moment轉(zhuǎn)化時(shí)間戳出現(xiàn)Invalid Date的問題及解決2. python爬蟲實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊3. 使用JSP技術(shù)實(shí)現(xiàn)一個(gè)簡單的在線測(cè)試系統(tǒng)的實(shí)例詳解4. .NET6打包部署到Windows Service的全過程5. 如何在jsp界面中插入圖片6. HTML 絕對(duì)路徑與相對(duì)路徑概念詳細(xì)7. 解決ajax請(qǐng)求后臺(tái),有時(shí)收不到返回值的問題8. UDDI FAQs9. asp批量添加修改刪除操作示例代碼10. WML的簡單例子及編輯、測(cè)試方法第1/2頁
