天天看點

在WIN7-64下使用PYTHON獲得攝像頭圖檔 - webooxx

在WIN7-64下使用PYTHON獲得攝像頭圖檔

環境是 Python27

需要下載下傳庫:

pygame 處理幀

http://www.lfd.uci.edu/~gohlke/pythonlibs/bpchanvi/pygame-1.9.2pre.win-amd64-py2.7.exe

VideoCature取得攝像頭圖像

http://www.lfd.uci.edu/~gohlke/pythonlibs/bpchanvi/VideoCapture-0.9.5.win-amd64-py2.7.exe

PIL python Image Lib 圖像處理,最基礎的依賴包

http://www.lfd.uci.edu/~gohlke/pythonlibs/bpchanvi/PIL-1.1.7.win-amd64-py2.7.exe

先來個攝像頭截取的代碼(從DEMO中摳出來的)

1 import VideoCapture
2 
3 cam = VideoCapture.Device(devnum=0)
4 cam.saveSnapshot(\'test.jpg\', quality=75, timestamp=3, boldfont=1)      

 

然後是比較複雜的連續從攝像頭中取得視訊流,把原有的DEMO代碼加了注釋調整了下順序

1 #coding=utf-8
 2 from VideoCapture import Device
 3 import ImageDraw, sys, pygame, time
 4 from pygame.locals import *
 5 from PIL import ImageEnhance
 6 
 7 #   設定視窗、攝像頭分辨率
 8 res = (640,480)
 9 
10 #   初始化視窗
11 pygame.init()
12 pygame.display.set_caption(\'Webcam\')
13 pygame.font.init()
14 
15 screen = pygame.display.set_mode((640,480))
16 font   = pygame.font.SysFont("Courier",11)
17 
18 #   取得攝像頭裝置,設定分辨率
19 cam = Device()
20 cam.setResolution(res[0],res[1])
21 
22 #   顯示文字資訊函數
23 def disp(phrase,loc):
24     s = font.render(phrase, True, (200,200,200))
25     sh = font.render(phrase, True, (50,50,50))
26     screen.blit(sh, (loc[0]+1,loc[1]+1))
27     screen.blit(s, loc)
28 
29 #   亮度,對比度
30 brightness = 1.0
31 contrast = 1.0
32 #   截圖計數器
33 shots = 0
34 
35 while 1:
36     camshot = ImageEnhance.Brightness(cam.getImage()).enhance(brightness)
37     camshot = ImageEnhance.Contrast(camshot).enhance(contrast)
38     for event in pygame.event.get():
39         if event.type == pygame.QUIT: sys.exit()
40     keyinput = pygame.key.get_pressed()
41     #   快捷鍵處理,調節亮度對比度
42     if keyinput[K_1]: brightness -= .1
43     if keyinput[K_2]: brightness += .1
44     if keyinput[K_3]: contrast -= .1
45     if keyinput[K_4]: contrast += .1
46     #   呼出調試
47     if keyinput[K_q]: cam.displayCapturePinProperties()
48     if keyinput[K_w]: cam.displayCaptureFilterProperties()
49     #   截圖儲存,shots為計數器
50     if keyinput[K_s]:
51         filename = str(time.time()) + ".jpg"
52         cam.saveSnapshot(filename, quality=80, timestamp=0)
53         shots += 1
54     #   從攝像頭中取得圖像
55     camshot = pygame.image.frombuffer(camshot.tostring(), res, "RGB")
56     screen.blit(camshot, (0,0))
57     disp("S:" + str(shots), (10,4))
58     disp("B:" + str(brightness), (10,16))
59     disp("C:" + str(contrast), (10,28))
60     #   填充圖像
61     pygame.display.flip()      

自己是準備處理圖像,把截屏出來的那個圖檔,取得邊緣。

1 import Image
2 import ImageFilter
3 img = Image.open(\'test.jpg\')
4 new_img = img.filter(ImageFilter.FIND_EDGES)
5 new_img.save(\'test2.jpg\')      

原本的想法是從攝像頭中取得圖像進行分析,分析眼動來替代滑鼠的位置。不過取出的視訊精度顯然很低。看來這個要以來高精度的攝像頭,高精度的攝像頭帶來的問題就是處理的速度降低。

同時,攝像頭在本本上,來定位腦袋、眼球、筆記本、攝像頭,轉換為螢幕上的滑鼠軌迹,顯然有點困難。不過在家裡面做個體感的遊戲還湊合。

整體上看,

在WIN7-64下使用PYTHON獲得攝像頭圖檔 - webooxx