
今天的博客是直接來源于我自己的個人工具函數庫。
過去幾個月,有些PyImageSearch讀者電郵問我:“如何獲取URL指向的圖片并將其轉換成OpenCV格式(不用將其寫入磁盤再讀回)”。這篇文章我將展示一下怎么實現這個功能。
額外的,我們也會看到如何利用scikit-image從URL下載一幅圖像。當然前行之路也會有一個常見的錯誤,它可能讓你跌個跟頭。
繼續往下閱讀,學習如何利用利用Python和OpenCV將URL轉換為圖像
方法1:OpenCV、NumPy、urllib
第一個方法:我們使用OpenCV、NumPy、urllib庫從URL獲取圖像,并將其轉換為圖像。打開并新建一個文件,取名url_to_image.py,我們開始吧:
# import the necessary packagesimport numpy as npimport urllibimport cv2 # METHOD #1: OpenCV, NumPy, and urllibdef url_to_image(url): # download the image, convert it to a NumPy array, and then read # it into OpenCV format resp = urllib.urlopen(url) image = np.asarray(bytearray(resp.read()), dtype="uint8") image = cv2.imdecode(image, cv2.IMREAD_COLOR) # return the image return image
首先要做的就是導入我們必需的包。我們將使用NumPy轉換下載的字節序為NumPy數組,使用urllib來執行實際的網絡請求,使用cv2來綁定OpenCV接口。
在第7行,我們定義了我們的url_to_image函數。這個函數帶一個url參數,也就是我們想要下載的圖像地址。
接下來,在第10行,我們使用urllib庫來打開這個圖像鏈接。11行則將這個下載下來的字節序轉換為NumPy數組。
至此,NumPy數組還是一個1維數組(也就是一個長長的像素鏈表)。為了將其轉換為2維格式,假設每個像素3個通道(意即分別為紅,綠,藍通道),在12行我們使用cv.imdecode函數。最后,在15行我們返回解碼出來的圖像給調用函數。
一切就緒,該到讓它工作的時候了:
# initialize the list of image URLs to downloadurls = [ "http://www.pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png", "http://www.pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png", "http://www.pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",] # loop over the image URLsfor 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)3-5行定義了我們將要下載和轉換為OpenCV格式的圖像地址列表。
第9行我們遍歷這個列表,13行則調用url_to_image函數,然后在14行和15行將獲取的圖像顯示到屏幕上。到此呢,我們就可以像正常情況下一樣,使用OpenCV來操作和處理這些圖像了。
新聞熱點
疑難解答