use*_*264 6 python webcam python-imaging-library
我正在使用Python与PIL和SciPy.我想从网络摄像头捕获图像,然后使用numpy和Scipy进一步处理它.有人可以帮我解决问题.
这里的代码有一个预定义的图像"lena",但我希望使用我自己捕获的图像而不是"lena"图像.我对代码做了哪些更改?
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)
Run Code Online (Sandbox Code Playgroud)
另一个例子
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()
Run Code Online (Sandbox Code Playgroud)
我已经使用了Markus Gritsch的很多视频捕捉,这可能是你想做的最简单,最快捷的方式.
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 (e.g. 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.
Run Code Online (Sandbox Code Playgroud)
您也可以使用Python绑定OpenCV.至少有两种方法可以做到这一点.我发现这个和本教程很有趣.
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.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您有一个numpy.ndarray(不再有PIL图像),以便在shell中显示图像类型:
import matplotlib.pyplot as plt
plt.imshow(image)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
你可以像上面那样显示它.
您可以使用 VideoCapture lib 从 USB 摄像头获取图片。
from VideoCapture import Device
came = Device()
came.setResolution(320, 240)
img = cam.getImage()
...
Run Code Online (Sandbox Code Playgroud)