Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Capturing a single image from my webcam in Java or Python

I want to capture a single image from my webcam and save it to disk. I want to do this in Java or Python (preferably Java). I want something that will work on both 64-bit Win7 and 32-bit Linux.

EDIT: I use Python 3.x, not 2.x

Because everywhere else I see this question asked people manage to get confused, I'm going to state a few things explicitly:

  • I do not want to use Processing
  • I do not want to use any language other than those stated above
  • I do want to display this image on my screen in any way, shape or form
  • I do not want to display a live video feed from my webcam on my screen, or save such a feed to my hard drive
  • The Java Media Framework is far too out of date. Do not suggest it.
  • I would rather not use JavaCV, but if I absolutely must, I want to know exactly which files from the OpenCV library I need, and how I can use these files without including the entire library (and preferably without sticking these files in any sort of PATH. Everything should be included in the one directory)
  • I can use Eclipse on the 64-bit Win7 computer if need be, but I also have to be able to compile and use it on 32-bit Linux as well
  • If you think I might or might not know something related to this subject in any way shape or form, please assume I do not know it, and tell me

EDIT2: I was able to get Froyo's pygame example working on Linux using Python 2.7 and pygame 1.9.1. the pygame.camera.camera_list() call didn't work, but it was unnecessary for the rest of the example. However, I had to call cam.set_controls() (for which you can find the documentation here http://www.pygame.org/docs/ref/camera.html) to up the brightness so I could actually see anything in the image I captured.

Also, I need to call the cam.get_image() and pygame.image.save() methods three times before the image I supposedly took on the first pair of calls actually gets saved. They appeared to be stuck in a weird buffer. Basically, instead of calling cam.get_image() once, I had to call it three times every single time I wanted to capture an image. Then and only then did I call pygame.image.save().

Unfortunately, as stated below, pygame.camera is only supported on Linux. I still don't have a solution for Windows.

like image 643
Matthew G Avatar asked Jun 19 '12 04:06

Matthew G


People also ask

Which function is used to capture the photo in OpenCV?

In OpenCV, we use two functions for Perspective transformation getPerspectiveTransform() and then warpPerspective().


2 Answers

@thebjorn has given a good answer. But if you want more options, you can try OpenCV, SimpleCV.

using SimpleCV (not supported in python3.x):

from SimpleCV import Image, Camera  cam = Camera() img = cam.getImage() img.save("filename.jpg") 

using 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 

using 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") 

Install OpenCV:

install python-opencv bindings, numpy 

Install SimpleCV:

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

get latest version of SimpleCV

Install pygame:

install pygame 
like image 55
Froyo Avatar answered Sep 29 '22 04:09

Froyo


On windows it is easy to interact with your webcam with pygame:

from VideoCapture import Device cam = Device() cam.saveSnapshot('image.jpg') 

I haven't tried using pygame on linux (all my linux boxen are servers without X), but this link might be helpful http://www.jperla.com/blog/post/capturing-frames-from-a-webcam-on-linux

like image 25
thebjorn Avatar answered Sep 29 '22 04:09

thebjorn