我想从我的摄像头捕捉单个图像,并将其保存到磁盘。 我想这样做在Java或Python(最好的Java)。 我想要的东西,将在64位的Win7和32位Linux工作。
编辑:我使用Python 3.x中,不是2.X
因为在其他地方我看到这个问题问的人管理感到困惑,我要明确说明几件事情:
- 我不想用处理
- 我不希望使用除上述以外的其他任何语言
- 我想以任何方式,形状或形式,以显示我的屏幕上这个形象
- 我不希望我的屏幕上显示从我的摄像头实况视频,或这样的饲料保存到我的硬盘驱动器
- Java媒体框架太过落伍。 不建议它。
- 我宁可不使用JavaCV,但如果我绝对必须的,我想知道哪些来自OpenCV库我需要的文件,以及如何使用这些文件,而不包括整个库(最好是没有任何形式的坚持这些文件PATH。一切都应该被包含在一个目录下)
- 我可以在64位的Win7电脑上使用Eclipse如果需要的话,但我也必须能够编译和使用它的32位Linux以及
- 如果你认为我可能会或可能不知道的有关这个问题的任何方式或形式的东西,请假设我不知道它,并告诉我
EDIT2:我能得到升级Froyo的pygame的例子在Linux上工作使用Python 2.7和1.9.1的Pygame。 在pygame.camera.camera_list()调用没有工作,但它是不必要的例子中的其余部分。 但是,我不得不打电话cam.set_controls()(您可以在这里找到文档http://www.pygame.org/docs/ref/camera.html )来调整亮度,所以我可以真正看到任何东西在像我拍摄的。
另外,我需要调用cam.get_image()和pygame.image.save()我理应承担了第一对呼叫实际上得到保存的图像前三次的方法。 他们似乎被卡在一个奇怪的缓冲。 基本上,而不是调用cam.get_image()一次,我只好叫了三次,每一次我想捕捉的图像。 然后,只有到那时我才打电话pygame.image.save()。
不幸的是,如下所述,pygame.camera只支持Linux。 我还没有为Windows的解决方案。
在Windows上很容易与pygame的摄像头互动:
from VideoCapture import Device
cam = Device()
cam.saveSnapshot('image.jpg')
在Linux上使用pygame的(所有我的Linux Boxen有是没有X服务器)我没有试过,但这种联系可能会有所帮助http://www.jperla.com/blog/post/capturing-frames-from-a-webcam-在Linux的
@thebjorn给了一个很好的答案。 但是,如果你想要更多的选择,你可以尝试OpenCV的,SimpleCV。
使用SimpleCV:
from SimpleCV import Image, Camera
cam = Camera()
img = cam.getImage()
img.save("filename.jpg")
使用OpenCV的 :
from cv2 import *
# initialize the camera
cam = VideoCapture(0) # 0 -> index of camera
s, img = cam.read()
if s: # frame captured without any errors
namedWindow("cam-test",CV_WINDOW_AUTOSIZE)
imshow("cam-test",img)
waitKey(0)
destroyWindow("cam-test")
imwrite("filename.jpg",img) #save image
使用pygame的 :
import pygame
import pygame.camera
pygame.camera.init()
pygame.camera.list_camera() #Camera detected or not
cam = pygame.camera.Camera("/dev/video0",(640,480))
cam.start()
img = cam.get_image()
pygame.image.save(img,"filename.jpg")
安装OpenCV:
install python-opencv bindings, numpy
安装SimpleCV:
install python-opencv, pygame, numpy, scipy, simplecv
获得最新版本的SimpleCV
安装pygame的 :
install pygame
前一段时间我写了简单的摄像头捕获的API可用于这一点。 该项目可在Github上。
示例代码:
Webcam webcam = Webcam.getDefault();
webcam.open();
try {
ImageIO.write(webcam.getImage(), "PNG", new File("test.png"));
} catch (IOException e) {
e.printStackTrace();
} finally {
webcam.close();
}
import cv2
camera = cv2.VideoCapture(0)
while True:
return_value,image = camera.read()
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('image',gray)
if cv2.waitKey(1)& 0xFF == ord('s'):
cv2.imwrite('test.jpg',image)
break
camera.release()
cv2.destroyAllWindows()
我写了从完全Python中的摄像头,基于DirectShow的捕捉图像的工具。 你可以在这里找到: https://github.com/andreaschiavinato/python_grabber 。
您可以使用以下方式dshow_graph.py整个应用程序或只是FilterGraph动态类:
from pygrabber.dshow_graph import FilterGraph
import numpy as np
from matplotlib.image import imsave
graph = FilterGraph()
print(graph.get_input_devices())
device_index = input("Enter device number: ")
graph.add_input_device(int(device_index))
graph.display_format_dialog()
filename = r"c:\temp\imm.png"
# np.flip(image, axis=2) required to convert image from BGR to RGB
graph.add_sample_grabber(lambda image : imsave(filename, np.flip(image, axis=2)))
graph.add_null_render()
graph.prepare()
graph.run()
x = input("Press key to grab photo")
graph.grab_frame()
x = input(f"File {filename} saved. Press key to end")
graph.stop()
它可以通过使用ecapture首先来完成,运行
pip install ecapture
然后在一个新的python脚本类型:
from ecapture import ecapture as ec
ec.capture(0,"test","img.jpg")
从更多的相关信息链接