Захват одного изображения с веб-камеры на Java или Python
Я хочу, чтобы захватить одно изображение с веб-камеры и сохранить его на диск. Я хочу сделать это на Java или Python (предпочтительно Java). Я хочу что-то, что будет работать как на 64-битном Win7, так и на 32-битном Linux.
EDIT: я использую Python 3.x, а не 2.x
поскольку везде, где я вижу этот вопрос, люди умудряются запутаться, я собираюсь заявить несколько вещей явно:
- Я не хочу использовать обработку
- Я не хочу использовать любой язык, отличный от указанных выше
- Я хочу отобразить это изображение на моем экране любым способом, формой или формой
- Я не хочу отображать прямую трансляцию видео с моей веб-камеры на моем экране или сохранять такую ленту на мой жесткий диск
- Java Media Framework слишком устарел. Не предлагай этого.
- Я бы предпочел не использовать JavaCV, но если я абсолютно должен, я хочу точно знать, какие файлы из библиотеки OpenCV мне нужны, и как я могу их использовать файлы без включения всей библиотеки (и желательно без вставления этих файлов в какой-либо путь. Все должно быть включено в один каталог)
- Я могу использовать Eclipse на 64-битном компьютере Win7, если нужно, но я также должен иметь возможность компилировать и использовать его на 32-битном Linux, а также
- если вы думаете, что я могу или не могу знать что-то, связанное с этим предметом в какой-либо форме или форме, пожалуйста, предположите, что я этого не знаю, и скажите мне
EDIT2: я смог получить пример pygame Froyo, работающий на Linux, используя Python 2.7 и pygame 1.9.1. в которым Pygame.камера.вызов camera_list () не работал, но это было ненужным для остальной части примера. Однако мне пришлось позвонить Кэму.set_controls () (для которого вы можете найти документацию здесьhttp://www.pygame.org/docs/ref/camera.html), чтобы увеличить яркость, чтобы я мог видеть что-либо на изображении, которое я захватил.
Кроме Того, I нужно позвонить в камеру.get_image () и pygame.изображение.методы save () три раза, прежде чем изображение, которое я предположительно взял на первую пару вызовов, фактически будет сохранено. Казалось, они застряли в странном буфере. В основном, вместо того, чтобы звонить Кэму.get_image () однажды мне пришлось вызывать его три раза каждый раз, когда я хотел захватить изображение. Тогда и только тогда я позвонил в pygame.изображение.спасать.)(
к сожалению, как указано ниже, pygame.камера поддерживается только в Linux. У меня все еще нет решение для Windows.
4 ответов
в windows легко взаимодействовать с веб-камерой с pygame:
from VideoCapture import Device
cam = Device()
cam.saveSnapshot('image.jpg')
Я не пробовал использовать pygame на linux (все мои Linux boxen-это серверы без X), но эта ссылка может быть полезнаhttp://www.jperla.com/blog/post/capturing-frames-from-a-webcam-on-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
некоторое время назад я написал simple 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()