从url图像中检测opencv python

时间:2014-05-29 05:00:57

标签: python url opencv

使用基于haar功能的cascades处理已保存的图像,我可以轻松获得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)

但我无法弄清楚如何打开网址图片并将其传递给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)

我是初学者,所以我为糟糕的解释道歉。 非常感谢!!

2 个答案:

答案 0 :(得分:0)

或者您可以使用VideoCapture()类打开网址图片。

请参阅下面的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();

答案 1 :(得分:0)

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

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