在Java或Python中从我的网络摄像头捕获单个图像

2022-08-31 22:43:30

我想从网络摄像头捕获单个图像并将其保存到磁盘。我想在Java或Python(最好是Java)中执行此操作。我想要一些可以在64位Win7和32位Linux上使用的东西。

编辑:我使用Python 3.x,而不是2.x

因为在其他地方,我看到这个问题被问到的人设法感到困惑,我将明确地陈述一些事情:

  • 我不想使用处理
  • 我不想使用除上述语言以外的任何语言
  • 我想以任何方式、形状或形式在屏幕上显示此图像
  • 我不想在屏幕上显示来自网络摄像头的实时视频源,也不想将此类源保存到我的硬盘驱动器
  • Java Media Framework太过时了。不要建议它。
  • 我宁愿不使用JavaCV,但是如果我绝对必须,我想知道我需要OpenCV库中的哪些文件,以及如何在不包含整个库的情况下使用这些文件(最好不要将这些文件粘贴到任何类型的PATH中)。所有内容都应包含在一个目录中)
  • 如果需要,我可以在64位Win7计算机上使用Eclipse,但我还必须能够在32位Linux上编译和使用它。
  • 如果您认为我可能会或可能不会以任何方式或形式知道与此主题有关的事情,请假设我不知道,并告诉我

编辑2:我能够使用Python 2.7和pygame 1.9.1在Linux上获得Froyo的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的解决方案。


答案 1

@thebjorn给出了一个很好的答案。但是如果你想要更多的选择,你可以试试OpenCV,SimpleCV。

使用 SimpleCV(python3.x 不支持):

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_cameras() #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

安装简单CV

install python-opencv, pygame, numpy, scipy, simplecv

获取最新版本的 SimpleCV

安装 pygame

install pygame

答案 2

在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-on-linux