在WIN7-64下使用PYTHON获得摄像头图片

本文探讨使用摄像头获取图像并进行分析以替代鼠标操作的方法,包括亮度对比度调节、截图保存、图像处理及眼动追踪初步尝试。讨论了摄像头在不同应用中的优劣,并提出在家庭环境下进行体感游戏的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境是 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 VideoCapture2 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.031 contrast = 1.032 #   截图计数器 33 shots = 034 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 -= .143     if keyinput[K_2]: brightness += .144     if keyinput[K_3]: contrast -= .145     if keyinput[K_4]: contrast += .146     #   呼出调试 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 += 154     #   从摄像头中取得图像 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 Image2 import ImageFilter3 img = Image.open('test.jpg')4 new_img = img.filter(ImageFilter.FIND_EDGES)5 new_img.save('test2.jpg')

 

原本的想法是从摄像头中取得图像进行分析,分析眼动来替代鼠标的位置。不过取出的视频精度显然很低。看来这个要以来高精度的摄像头,高精度的摄像头带来的问题就是处理的速度降低。

同时,摄像头在本本上,来定位脑袋、眼球、笔记本、摄像头,转换为屏幕上的鼠标轨迹,显然有点困难。不过在家里面做个体感的游戏还凑合。

 

整体上看,

转载于:https://my.oschina.net/u/201886/blog/75276

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值