国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) Python教程 利用Python和OpenCV庫將URL轉(zhuǎn)換為OpenCV格式的方法

利用Python和OpenCV庫將URL轉(zhuǎn)換為OpenCV格式的方法

Jun 10, 2016 pm 03:16 PM
numpy opencv python url

2015327143841977.jpg (690×553)

今天的博客是直接來源于我自己的個人工具函數(shù)庫。

過去幾個月,有些PyImageSearch讀者電郵問我:“如何獲取URL指向的圖片并將其轉(zhuǎn)換成OpenCV格式(不用將其寫入磁盤再讀回)”。這篇文章我將展示一下怎么實(shí)現(xiàn)這個功能。

額外的,我們也會看到如何利用scikit-image從URL下載一幅圖像。當(dāng)然前行之路也會有一個常見的錯誤,它可能讓你跌個跟頭。

繼續(xù)往下閱讀,學(xué)習(xí)如何利用利用Python和OpenCV將URL轉(zhuǎn)換為圖像


方法1:OpenCV、NumPy、urllib

第一個方法:我們使用OpenCV、NumPy、urllib庫從URL獲取圖像,并將其轉(zhuǎn)換為圖像。打開并新建一個文件,取名url_to_image.py,我們開始吧:

# import the necessary packages
import numpy as np
import urllib
import cv2
 
# METHOD #1: OpenCV, NumPy, and urllib
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)
  image = np.asarray(bytearray(resp.read()), dtype="uint8")
  image = cv2.imdecode(image, cv2.IMREAD_COLOR)
 
  # return the image
  return image

首先要做的就是導(dǎo)入我們必需的包。我們將使用NumPy轉(zhuǎn)換下載的字節(jié)序?yàn)镹umPy數(shù)組,使用urllib來執(zhí)行實(shí)際的網(wǎng)絡(luò)請求,使用cv2來綁定OpenCV接口。
在第7行,我們定義了我們的url_to_image函數(shù)。這個函數(shù)帶一個url參數(shù),也就是我們想要下載的圖像地址。

接下來,在第10行,我們使用urllib庫來打開這個圖像鏈接。11行則將這個下載下來的字節(jié)序轉(zhuǎn)換為NumPy數(shù)組。

至此,NumPy數(shù)組還是一個1維數(shù)組(也就是一個長長的像素鏈表)。為了將其轉(zhuǎn)換為2維格式,假設(shè)每個像素3個通道(意即分別為紅,綠,藍(lán)通道),在12行我們使用cv.imdecode函數(shù)。最后,在15行我們返回解碼出來的圖像給調(diào)用函數(shù)。

一切就緒,該到讓它工作的時候了:

# 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",
  "http://www.pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.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)

3-5行定義了我們將要下載和轉(zhuǎn)換為OpenCV格式的圖像地址列表。

第9行我們遍歷這個列表,13行則調(diào)用url_to_image函數(shù),然后在14行和15行將獲取的圖像顯示到屏幕上。到此呢,我們就可以像正常情況下一樣,使用OpenCV來操作和處理這些圖像了。

眼見為實(shí),打開終端,執(zhí)行如下指令:

復(fù)制代碼 代碼如下:

$ python url_to_image.py


如果一切順利的話,你會看到OpenCV的logo:

2015327144145476.jpg (690×553)

圖1:從URL下載OpenCV logo并轉(zhuǎn)換為OpenCV格式


接下來是Google的logo:

2015327144648394.jpg (690×296)

圖2:從URL下載Gooogle并轉(zhuǎn)換為OpenCV格式


這里也有在我書中驗(yàn)證人臉檢測的例子,《Practical Python and OpenCV》:

2015327145507830.jpg (690×292)

圖3:轉(zhuǎn)換一個URL圖像為OpenCV格式

現(xiàn)在,我們來看另一種獲取圖像并轉(zhuǎn)換為OpenCV格式的方法。


方法2:使用scikit-image

第二種方法假定你已經(jīng)在你計算機(jī)上安裝好了scikit-image庫。讓我們看看怎樣采用scikit-image從URL獲取圖像并將其轉(zhuǎn)換為OpenCV格式:

# METHOD #2: scikit-image
from skimage import io
 
# loop over the image URLs
for url in urls:
  # download the image using scikit-image
  print "downloading %s" % (url)
  image = io.imread(url)
  cv2.imshow("Incorrect", image)
  cv2.imshow("Correct", cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
  cv2.waitKey(0)

scikit-image庫中做得很漂亮的一點(diǎn)是:io子庫中的imread函數(shù)能夠區(qū)分圖像路徑到底在磁盤上還是一個URL(第9行)。

盡管這樣,這里有一個很嚴(yán)重的錯誤可能讓你跌一個跟頭!

OpenCV以BGR順序表達(dá)一幅圖像,然而scikit-image則是RGB順序。如果你使用scikit-iamge的imread函數(shù),而且還想在下載完成后使用OpenCV的函數(shù),那么你要小心了。如41行所述,你需要將圖像從RBG轉(zhuǎn)換為BGR。

如果你沒有這一步,那么你可能得到錯誤的結(jié)果:

2015327145042117.jpg (690×368)

圖4:在用scikit-image時,需要特別注意將RGB轉(zhuǎn)換為BGR。左邊的圖像就是不正確的RGB順序,右邊的則是將RGB轉(zhuǎn)換為BGR,所以能正常顯示。

看看Google的logo就更明顯了

2015327145209903.jpg (690×147)

圖5:順序很重要。確保將RGB轉(zhuǎn)換為BGR,否則就留下了一個很難發(fā)現(xiàn)的bug。

到此為止,你明白了吧!這兩種方法分別使用Python、OpenCV、urllib,和scikit-image來將URL指向的圖片轉(zhuǎn)換為圖像。


總結(jié)

本文中,我們學(xué)會了如何從URL獲取圖像,且使用Python和OpenCV將其轉(zhuǎn)換為OpenCV格式。

第一種方法使用urllib包獲取圖像,使用Numpy轉(zhuǎn)換為數(shù)組,最后使用OpenCV重新構(gòu)建數(shù)組產(chǎn)生我們的圖像。

第二種方式使用scikit-image中的io.imread函數(shù)。

所以,哪種更好呢?

這完全取決于你的安裝。

如果你已經(jīng)安裝scikit-image,那么我可能就用io.imread(只是不要忘記如果要用OpenCV函數(shù)的話,要將RGB轉(zhuǎn)換為BGR)。

如果你沒有安裝scikit-image,那么url_to_image就是手邊現(xiàn)成的工具。具體細(xì)節(jié)參考本文開始處。

我很快會在Github上將這個函數(shù)添加到imutils庫中。

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
python seaborn關(guān)節(jié)圖示例 python seaborn關(guān)節(jié)圖示例 Jul 26, 2025 am 08:11 AM

使用Seaborn的jointplot可快速可視化兩個變量間的關(guān)系及各自分布;2.基礎(chǔ)散點(diǎn)圖通過sns.jointplot(data=tips,x="total_bill",y="tip",kind="scatter")實(shí)現(xiàn),中心為散點(diǎn)圖,上下和右側(cè)顯示直方圖;3.添加回歸線和密度信息可用kind="reg",并結(jié)合marginal_kws設(shè)置邊緣圖樣式;4.數(shù)據(jù)量大時推薦kind="hex",用

python列表到字符串轉(zhuǎn)換示例 python列表到字符串轉(zhuǎn)換示例 Jul 26, 2025 am 08:00 AM

字符串列表可用join()方法合并,如''.join(words)得到"HelloworldfromPython";2.數(shù)字列表需先用map(str,numbers)或[str(x)forxinnumbers]轉(zhuǎn)為字符串后才能join;3.任意類型列表可直接用str()轉(zhuǎn)換為帶括號和引號的字符串,適用于調(diào)試;4.自定義格式可用生成器表達(dá)式結(jié)合join()實(shí)現(xiàn),如'|'.join(f"[{item}]"foriteminitems)輸出"[a]|[

python pandas融化示例 python pandas融化示例 Jul 27, 2025 am 02:48 AM

pandas.melt()用于將寬格式數(shù)據(jù)轉(zhuǎn)為長格式,答案是通過指定id_vars保留標(biāo)識列、value_vars選擇需融化的列、var_name和value_name定義新列名,1.id_vars='Name'表示Name列不變,2.value_vars=['Math','English','Science']指定要融化的列,3.var_name='Subject'設(shè)置原列名的新列名,4.value_name='Score'設(shè)置原值的新列名,最終生成包含Name、Subject和Score三列

優(yōu)化用于內(nèi)存操作的Python 優(yōu)化用于內(nèi)存操作的Python Jul 28, 2025 am 03:22 AM

pythoncanbeoptimizedFormized-formemory-boundoperationsbyreducingOverHeadThroughGenerator,有效dattratsures,andManagingObjectLifetimes.first,useGeneratorSInsteadoFlistSteadoflistSteadoFocessLargedAtasetSoneItematatime,desceedingingLoadeGingloadInterveringerverneDraineNterveingerverneDraineNterveInterveIntMory.second.second.second.second,Choos,Choos

Python連接到SQL Server PYODBC示例 Python連接到SQL Server PYODBC示例 Jul 30, 2025 am 02:53 AM

安裝pyodbc:使用pipinstallpyodbc命令安裝庫;2.連接SQLServer:通過pyodbc.connect()方法,使用包含DRIVER、SERVER、DATABASE、UID/PWD或Trusted_Connection的連接字符串,分別支持SQL身份驗(yàn)證或Windows身份驗(yàn)證;3.查看已安裝驅(qū)動:運(yùn)行pyodbc.drivers()并篩選含'SQLServer'的驅(qū)動名,確保使用如'ODBCDriver17forSQLServer'等正確驅(qū)動名稱;4.連接字符串關(guān)鍵參數(shù)

python django形式示例 python django形式示例 Jul 27, 2025 am 02:50 AM

首先定義一個包含姓名、郵箱和消息字段的ContactForm表單;2.在視圖中通過判斷POST請求處理表單提交,驗(yàn)證通過后獲取cleaned_data并返回響應(yīng),否則渲染空表單;3.在模板中使用{{form.as_p}}渲染字段并添加{%csrf_token%}防止CSRF攻擊;4.配置URL路由將/contact/指向contact_view視圖;使用ModelForm可直接關(guān)聯(lián)模型實(shí)現(xiàn)數(shù)據(jù)保存,DjangoForms實(shí)現(xiàn)了數(shù)據(jù)驗(yàn)證、HTML渲染與錯誤提示的一體化處理,適合快速開發(fā)安全的表單功

什么是加密貨幣中的統(tǒng)計套利?統(tǒng)計套利是如何運(yùn)作的? 什么是加密貨幣中的統(tǒng)計套利?統(tǒng)計套利是如何運(yùn)作的? Jul 30, 2025 pm 09:12 PM

統(tǒng)計套利簡介統(tǒng)計套利是一種基于數(shù)學(xué)模型在金融市場中捕捉價格錯配的交易方式。其核心理念源于均值回歸,即資產(chǎn)價格在短期內(nèi)可能偏離長期趨勢,但最終會回歸其歷史平均水平。交易者利用統(tǒng)計方法分析資產(chǎn)之間的關(guān)聯(lián)性,尋找那些通常同步變動的資產(chǎn)組合。當(dāng)這些資產(chǎn)的價格關(guān)系出現(xiàn)異常偏離時,便產(chǎn)生套利機(jī)會。在加密貨幣市場,統(tǒng)計套利尤為盛行,主要得益于市場本身的低效率與劇烈波動。與傳統(tǒng)金融市場不同,加密貨幣全天候運(yùn)行,價格極易受到突發(fā)新聞、社交媒體情緒及技術(shù)升級的影響。這種持續(xù)的價格波動頻繁制造出定價偏差,為套利者提供

與Python Biopython的生物信息學(xué) 與Python Biopython的生物信息學(xué) Jul 27, 2025 am 02:33 AM

Biopython是生物信息學(xué)中處理生物數(shù)據(jù)的重要Python庫,其提供了豐富的功能以提升開發(fā)效率。安裝方法簡單,使用pipinstallbiopython即可完成安裝。導(dǎo)入Bio模塊后可快速解析FASTA文件等常見序列格式。Seq對象支持DNA、RNA和蛋白質(zhì)序列的操作,如反轉(zhuǎn)互補(bǔ)和翻譯成蛋白序列。通過Bio.Entrez可訪問NCBI數(shù)據(jù)庫并獲取GenBank數(shù)據(jù),但需設(shè)置郵箱。此外,Biopython支持兩兩序列比對及PDB文件解析,適用于結(jié)構(gòu)分析任務(wù)。

See all articles