基于url图像的opencv python人脸检测

基于url图像的opencv python人脸检测,python,url,opencv,Python,Url,Opencv,我可以在保存的图像上使用基于haar特征的级联进行opencv人脸检测: from PIL import Image face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') img = cv2.imread('pic.png') gray = cv2.cvtColor(img, cv

我可以在保存的图像上使用基于haar特征的级联进行opencv人脸检测:

from PIL import Image
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

img = cv2.imread('pic.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
但我不知道如何打开url图像并将其传递到face_cascade。我一直在玩cStringIO,但我不知道该怎么处理它

import cv2.cv as cv
import urllib, cStringIO
img = 'http://scontent-b.cdninstagram.com/hphotos-prn/t51.2885-15/10424498_582114441904402_1105042543_n.png'
file = cStringIO.StringIO(urllib.urlopen(img).read())
source = Image.open(file).convert("RGB")
bitmap = cv.CreateImageHeader(source.size, cv.IPL_DEPTH_8U, 3)
cv.SetData(bitmap, source.tostring())
cv.CvtColor(bitmap, bitmap, cv.CV_RGB2BGR)
是否可以改为使用numpy阵列

source2 = Image.open(file)
imarr=numpy.array(source2,dtype=numpy.uint8)
我是个初学者,所以我很抱歉解释得不好。
提前多谢

或者通过另一种方式,您可以使用类打开url图像

见下面的C++代码,

VideoCapture cap;

if(!cap.open("http://docs.opencv.org/trunk/_downloads/opencv-logo.png")){
cout<<"Cannot open image"<<endl;
return -1;
}
Mat src;
cap>>src;
imshow("src",src);
waitKey();
videocap;
如果(!盖打开(“http://docs.opencv.org/trunk/_downloads/opencv-logo.png")){

cout在第一个示例中,您正在使用
OpenCV2.imread
读取图像,而在第二个示例中,您可能正在使用
PIL.image
然后尝试转换


为什么不简单地将文件保存到一个临时目录,然后再次使用
OpenCV2.imread

您是否有任何错误?对不起,是的,我有一个错误。如果我尝试应用颜色\u bgr2 gray,就像上面的gray=…我得到错误:TypeError:src不是numpy数组,scalarnumpy数组也不是正确的方法。谢谢大家。这就是当然可以,但我正在使用python instagram api抓取大量图片,我想将这些图片分割出来并进行可视化处理,因此我希望从URL中读取,假设您有一个多核处理器,如果您保存并处理一个,使用线程或多处理开始下一次下载,并删除文件在处理结束时,您会发现对处理时间的影响很小,磁盘空间上的平均图像大小只有2倍。