zoukankan      html  css  js  c++  java
  • 使用Python和OpenCV通过网址URL获取图片

    在OpenCV中通过图片的URL地址获取图片:

    # -*- coding: utf-8 -*-
    import numpy as np
    import urllib
    import cv2
    
    # URL到图片
    def url_to_image(url):
        # download the image, convert it to a NumPy array, and then read
        # it into OpenCV format
        resp = urllib.urlopen(url)
        # bytearray将数据转换成(返回)一个新的字节数组
        # asarray 复制数据,将结构化数据转换成ndarray
        image = np.asarray(bytearray(resp.read()), dtype="uint8")
        # cv2.imdecode()函数将数据解码成Opencv图像格式
        image = cv2.imdecode(image, cv2.IMREAD_COLOR)
        # return the image
        return image
    
    # initialize the list of image URLs to download
    urls = [
        "http://www.pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
        "http://www.pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png"
    ]
    
    # loop over the image URLs
    for url in urls:
        # download the image URL and display it
        print "downloading %s" % (url)
        image = url_to_image(url)
        cv2.imshow("Image", image)
        cv2.waitKey(0)

    以上过程用到bytearray、numpy.asarray、cv2.imdecode



    Python bytearray()


    bytearray是Python内的一个类,bytearray()返回一个新字节数组,可以看做是array的字节表示。bytearray()需要一个数组作为参数,这个数组里的元素是可变的,并且数组里每个元素的值范围是: 0 <= x < 256。

    bytearray()使用:

    # -*- coding: utf-8 -*-
    a = bytearray()
    b = bytearray([1,2,3,4,5])
    c = bytearray('ABC','UTF-8')
    d = bytearray(u'中文','UTF-8')
    print type(a)
    print type(b)
    print c
    print d
    print(len(a))
    print(len(b))
    print(len(c))
    print(len(d))

    输出:

    <type 'bytearray'>
    <type 'bytearray'>
    ABC
    中文
    0
    5
    3
    6


    numpy.asarray()


    numpy.asarray()函数的作用是将输入数据(列表的列表,元组的元组,元组的列表等结构化数据)转换为numpy中矩阵(ndarray、多维数组对象)的形式。

    # -*- coding: utf-8 -*-
    import numpy as np
    
    data1=[[1,2,3],[1,2,3],[1,2,3]]
    data2=[(1,2,3),(1,2,3),(1,2,3)]
    data3=[(1,2,3,1,2,3,1,2,3)]
    data4=[1,2,3,1,2,3,1,2,3]
    
    arr1=np.array(data1)
    arr2=np.array(data1)
    arr3=np.array(data3)
    arr4=np.array(data4)
    
    print arr1
    print arr2
    print arr3
    print arr4

    输出:

    [[1 2 3]
     [1 2 3]
     [1 2 3]]
    [[1 2 3]
     [1 2 3]
     [1 2 3]]
    [[1 2 3 1 2 3 1 2 3]]
    [1 2 3 1 2 3 1 2 3]


    指定转换类型

    # -*- coding: utf-8 -*-
    import numpy as np
    
    data1=[[1,2,3],[1,2,3],[1,2,3]]
    data2=[(1,2,3),(1,2,3),(1,2,3)]
    data3=[(1,2,3,1,2,3,1,2,3)]
    data4=[1,2,3,1,2,3,1,2,3]
    
    arr1=np.array(data1,'f')
    arr2=np.array(data1,'f')
    arr3=np.array(data3,'f')
    arr4=np.array(data4,'f')
    
    print arr1
    print arr2
    print arr3
    print arr4

    'f'表示float浮点型,输出:

    [[ 1.  2.  3.]
     [ 1.  2.  3.]
     [ 1.  2.  3.]]
    [[ 1.  2.  3.]
     [ 1.  2.  3.]
     [ 1.  2.  3.]]
    [[ 1.  2.  3.  1.  2.  3.  1.  2.  3.]]
    [ 1.  2.  3.  1.  2.  3.  1.  2.  3.]

    array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会,跟数据源指向同一块内存。

  • 相关阅读:
    FastDFS概述及原理
    SpringBoot中使用Redis缓存注解
    SpringBoot中使用Redis
    Jedis
    Redis客户端
    Redis的集群配置
    Redis的复制
    英语笔记-5
    内网转发Ubuntu
    数学笔记-4
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411759.html
Copyright © 2011-2022 走看看