【问题标题】:Python: Urllib2 and OpenCVPython:Urllib2 和 OpenCV
【发布时间】:2012-06-30 12:21:30
【问题描述】:

我有一个程序将图像保存在本地目录中,然后从该目录中读取图像。

但我不想保存图像。我想直接从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)

这会给我这个错误:

参数 1 必须是没有空字节的字符串,而不是 str

我能做什么?

【问题讨论】:

    标签: python opencv urllib2 loadimage


    【解决方案1】:

    如果你愿意,你可以使用 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)
    

    我想通过这种方法你不需要保存图像文件。

    【讨论】:

    • 感谢,非常有用!一点:我收到“来自 CStringIO ...”的错误。它应该是“来自 cStringIO ...”(小写“c”)。
    【解决方案2】:
    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
    

    【讨论】:

      【解决方案3】:

      正如here LoadImage 所提到的,第一个参数是文件名,而不是数据

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多