Image capture for processing

I am using Python with PIL and SciPy. I want to capture an image from a webcam and then process it using numpy and Scipy. Can someone please help me with the code.

Here the code is the predefined image "lena", but I want to use my own captured image instead of the image "lena". What changes have I made to the code?

from scipy import misc lena = misc.lena() lx, ly = lena.shape import matplotlib.pyplot as plt crop_lena = lena[lx / 4: - lx / 4, ly / 4: - ly / 4] plt.imshow(crop_lena) 

Another example

 import scipy from scipy import ndimage import matplotlib.pyplot as plt import numpy as np l = scipy.misc.lena() plt.figure(figsize=(10, 3.6)) plt.subplot(131) plt.imshow(l, cmap=plt.cm.gray) plt.show() 
+6
source share
2 answers

You can use VideoCapture lib to get an image from a USB camera.

 from VideoCapture import Device came = Device() came.setResolution(320, 240) img = cam.getImage() ... 
+4
source

Capture video from Markus Gritsch

I used a lot of Video Capture from Markus Gritsch , and this is probably the easiest and fastest way to do what you want.

 from VideoCapture import Device from numpy import * from PIL import Image cam = Device(devnum=0, showVideoWindow=0) #devnum=0 means you are using the device set in 0 position probably your webcam blackimg= cam.getImage() #this return a PIL image but I don't know why the first is always black #blackimag.show()#try to check if you want image=cam.getImage() #this is a real image PIL image imgarray = asarray(image) #convert the image into a matrix #imgarrayfloat = imgarray.astype('float') # in many cases of processing you have to convert to a float matrix because can occur overflow (eg for average images summing pixels values of 255 and 3 of two images and divide by 2 gives you 1/2 for imgarray and 258/2 for imgarrayfloat #recovertedimage=processedimage.astype ("uint8")#if you use the previous you have to reconvert to unit8. Note processedimage is the name of the variable of your image. 

Python OpenCV: cv2 and cv

You can do this with Python binding for OpenCV . There are at least two ways to do this. I found this and this interesting tutorial.

Video capture

 from cv2 import * cam = VideoCapture(0) #set the port of the camera as before retval, image = cam.read() #return a True bolean and and the image if all go right cam.release() #Closes video file or capturing device. 

In this case, you have numpy.ndarray (more PIL image) to show the type of image in the shell:

 import matplotlib.pyplot as plt plt.imshow(image) 

Old way with CaptureFromCAM

 import cv2.cv as cv import numpy as np Capture = cv.CaptureFromCAM(0) image = cv.QueryFrame(Capture) #here you have an IplImage imgarray = np.asarray(image[:,:]) #this is the way I use to convert it to numpy array 

You can show it as above.

+4
source

Source: https://habr.com/ru/post/954544/


All Articles