使用Python和OpenCV通過網址URL獲取圖片
阿新 • • 發佈:2019-02-06
在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不會,跟資料來源指向同一塊記憶體。