Python: Urllib2和OpenCV

5
我有一个程序,它将图像保存在本地目录中,然后从该目录读取图像。
但我不想保存这个图像。我希望直接从url读取。
这是我的代码:
import cv2.cv as cv
import urllib2

url = "http://cache2.allpostersimages.com/p/LRG/18/1847/M5G8D00Z/posters/curious-cat.jpg"
filename = "my_test_image" + url[-4:]
print filename
opener = urllib2.build_opener()

page = opener.open(url) 
img= page.read()

abc = open(filename, "wb")
abc.write(img)
abc.close()

img = cv.LoadImage(filename)

cv.ShowImage("Optical Flow", img)
cv.WaitKey(30)

如果我将其更改为:
img = cv.LoadImage(img)

这将给我报以下错误:

第一个参数必须为不含空字节的字符串,而不是str

我该怎么办?
3个回答

4
如果需要,你可以使用PIL。
import cv2.cv as cv
import urllib2
from cStringIO import StringIO
import PIL.Image as pil
url="some_url"

img_file = urllib2.urlopen(url)
im = StringIO(img_file.read())
source = pil.open(im).convert("RGB")
bitmap = cv.CreateImageHeader(source.size, cv.IPL_DEPTH_8U, 3)
cv.SetData(bitmap, source.tostring())
cv.CvtColor(bitmap, bitmap, cv.CV_RGB2BGR)

我猜这种方法可以避免保存图像文件。

谢谢,非常有用!一个要点:我在“from CStringIO...”处遇到了错误。应该是“from cStringIO...”(小写的'c')。 - Phil Gyford

0
import numpy as np
import urllib
import cv2

def url_to_image(url):
    response = urllib.urlopen(url)
    image = np.asarray(bytearray(response.read()), dtype="uint8")
    cv2_img = cv2.imdecode(image, cv2.IMREAD_COLOR)
    return cv2_img

-1

此处所述,LoadImage函数期望第一个参数为文件名而非数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接