[python opencv 計算機視覺零基礎到實戰] 一 opencv的helloworld

前置條件

說明:本系列opencv實戰教程將從基礎到實戰,若只是簡單學習完python也可以通過該教程完成一般的機器學習編程;文中將會對很多python的基礎內容進行講解,但由于文章定位的原因將不會贅述過多的基礎內容,基礎內容進行第一次講解后第二次將不會過多贅述,本文主要講解的是opencv相關知識。

本文系統及環境:本文將在windows7操作系統下以python作為編程語言,完成對opencv的程序編寫。python版本是3.8。

目錄

[python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld

[【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 四、了解色彩空間及其詳解] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 五、對象追蹤] 一、opencv的helloworld

一、學習目標

  1. 安裝opencv
  2. 了解什么是計算機視覺
  3. 了解讀取圖片的方法
  4. 了解顯示圖片的方法

二、完成opencv的helloworld程序編寫

2.1 opencv是什么

要了解opencv是什么,首先可以看opencv的全程——Open Source Computer Vision Library,翻譯過來為“開源的計算機系統識別庫”。那計算機視覺指的是什么呢?

計算機視覺并不是指計算機可以去查看某些東西,這個說法太過片面,并不嚴謹;計算機視覺其實是研究如何讓計算機去代替人去觀察,并且進行一些目標上的處理。在opencv中,集成了很多方法,可以讓我們開發者很容易的完成某些視覺上的操作,完成某些目標;通過opencv,可以讓我們無需了解太多的算法知識,簡便的進行開發。

2.2 opencv可以做什么

opencv應用廣泛,例如人臉識別、車牌識別、機器人、指紋、文字等,還可以對圖片信息進行方便的編輯,例如可以模糊圖片、檢測目標等;我們可以通過學習opencv可以做一個“檢測老板面部自動切屏程序”、“類似于圖片摳圖等圖片操作的軟件”、“自動駕駛”等。

2.3 opencv的安裝

opencv的安裝很簡單,使用pip命令安裝即可。命令如下:

pip install opencv-python

安裝完成后可以在cmd黑框框中進入python命令的交互界面,引入opencv即可知道是否已經安裝成功。步驟如下:
首先輸入python進入python命令的交互界面:

隨后輸入命令import cv2,引入OpenCV庫:

若此時并未出錯,則說明opencv安裝正確。
其中import表示引入,import cv2表示引入cv2這個模塊,cv2是模塊名;其中import的作用是引入。

2.4 opencv的helloworld

opencv的helloworld程序跟一般的helloworld程序不同,指讀取一張圖片并且顯示。我們打開自己的編輯器,我使用的編輯器是notepad。

opencv讀取圖片使用的是imread方法,在imread方法傳入一張圖片的路徑即可讀取到該圖片,但需要注意的是,在讀取圖片時,路徑不能出現中文、文件名最好是中文、在傳入時還需要注意斜桿會轉義,盡量的加r使文件路徑不轉義。查看以下示例:

img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')

以上代碼讀取一張路徑為“C:\Users\mx\Desktop\1.jpg”的圖片,并且賦值給img變量,這是img則為改圖片對象。隨后顯示該變量內容需要先創建一個窗口,名為ImageShow,使用namedWindow方法。代碼如下:

cv2.namedWindow("Image")

namedWindow接收2個參數,一個為窗口名稱,另一個為顯示方式;顯示方式包括cv.WINDOW_AUTOSIZE與*cv.WINDOW_NORMAL,默認情況下是cv.WINDOW_AUTOSIZE;默認情況下并不能改變窗口大小,若圖片太大,將會對查看造成一定的影響,使用cv.WINDOW_NORMAL則可以對窗口大小進行拖動更改,將會方便我們的查看。我們將以上代碼更改,代碼如下:

cv2.namedWindow("Image",cv.WINDOW_NORMAL)

接下來我們將顯示圖像,使用imshow方法。代碼如下:

cv2.imshow("Image", img)

imshow方法接收2個參數,第一個是我們需要在哪個窗口顯示的名稱,第二個是讀取后的圖片對象img。若在上一步中不創建窗口Image,在使用imshow方法時依舊可以直接顯示,此時將會創建一個當前所命名的窗口。接下來需要添加一個等待,防止程序運行完后自動關閉。代碼如下:

cv2.waitKey (0)

接下來關掉窗口,調用destroyAllWindows方法,該方法將會銷毀所有創建的窗口:

cv2.destroyAllWindows()

也可以使用destroyWindow方法銷毀指定的窗口,如下代碼:

cv2.destroyWindow("Image")

以上完整的代碼如下:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#讀取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#創建一個窗口
cv2.imshow("Image", img)#顯示圖像
cv2.waitKey (0)#等待關閉
cv2.destroyAllWindows()#destroy

運行代碼,將會出現圖片:

以上圖片左上角為title頭,是窗口名稱,并且改圖片可以拖動改變大小。我們更改imshow代碼,使其指定到一個未創建的窗口進行顯示:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#讀取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#創建一個窗口
cv2.imshow("Image1", img)#顯示圖像
cv2.waitKey (0)#等待關閉
cv2.destroyAllWindows()#destroy

運行結果如下:

我們發現,這時創建了一個Image1窗口,該窗口顯示了該圖片內容,并且不能改動大小;我們使用namedWindow創建的Image窗口并沒有指定顯示內容,所以導致顯示內容無,但是可以自動改變大小,這時因為我們創建該窗口時傳入了cv2.WINDOW_NORMAL選擇了可自由改變大小。這時可通過這個小例子很好的對比cv2.WINDOW_NORMAL與cv2.WINDOW_AUTOSIZE的區別。

這時也可以改變代碼:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#讀取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#創建一個窗口
cv2.imshow("Image1", img)#顯示圖像
cv2.destroyWindow("Image")
cv2.waitKey (0)#等待關閉
cv2.destroyAllWindows()#destroy

以上代碼中在waitKey 之前使用了destroyWindow方法對無用的Image窗口進行了銷毀,運行時將會不再出現Image窗口。
注:文章首發于ebaina

三、總結

  1. 了解了安裝opencv 的命令 pip install opencv-python
  2. 了解計算機視覺是研究如何讓計算機去代替人去觀察,并且進行一些目標上的處理
  3. 了解讀取圖片的方法imread
  4. 了解顯示圖片的方法imshow
  5. 了解窗口創建的多個模式WINDOW_NORMAL與WINDOW_AUTOSIZE
  6. 了解了銷毀所有窗口的方法destroyAllWindows與銷毀指定窗口的方法destroyWindow

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287601.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android之用setColorFilter在ImageView上面覆蓋一層灰色的圖層

1 問題 在圖片上面覆蓋一層灰色的圖層 2 解決辦法 比如點擊圖片覆蓋黑色 imageView.setColorFilter(ContextCompat.getColor(context, R.color.picture_color_black_80), PorterDuff.Mode.SRC_ATOP); 然后點擊圖片還原回來 imageView.setColorFilter(ContextCompat.getCol…

【計算機圖形學】實驗:VB.net環境下的綜合繪圖與交互技術案例教程

一、實驗目的 掌握在.net環境下的繪圖軟件界面設計與交互技術。 二、實驗準備 學習在.net環境下的界面設計的一般原理與交互技術等基本知識。 三、實驗內容 將前7個實驗內容集成到一個界面下,如直線段、圓、矩形與曲線的繪制填充,以及對圖像的處理&…

IE8 兼容background-size的解決辦法

.bgpic { background-image:url(); background-size:cover; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src,sizingMethodscale); } 注意progid里面的src路徑是絕對路徑或是相對于頁面的路徑。? div class"bgpic"style"width:200px;height:1…

從頭開始敲代碼之《從BaseApplication/Activity開始》

轉載請注明出處王亟亟的大牛之路 其安易持,其未兆易謀;其脆易泮,其微易散。為之于未有,治之于未亂。合抱之木,生于毫末;九層之臺,起于壘土;千里之行,始于足下。為者敗之…

查缺補漏系統學習 EF Core 6 - 原始 SQL 查詢

推薦關注「碼俠江湖」加星標,時刻不忘江湖事這是 EF Core 系列的第五篇文章,上一篇文章盤點了 EF Core 中的幾種數據查詢方式。但是有有時候,我們可能無法用標準的 LINQ 方法完成查詢任務。或者編譯后的 LINQ 查詢,沒有我們想要的…

【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取

一、學習目標 了解圖片的結構屬性了解如何捕獲視頻了解waitkey的使用方法 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python opencv 計…

python冒泡排序代碼完整_用Python寫冒泡排序代碼

python代碼實現冒泡排序代碼其實很簡單,具體代碼如下所示:代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 def bubbleSort(numbers):for j in xrange(len(numbers),-1,-1):for i in xra…

[C++]VS2005(VC8) 使用 Boost

測試環境:[1] Widnows XP Professional[2] Visual Studio 2005 Team Studio(VC8.0)[3] WinCvs 1.31. 下載 Boost透過 CVS 下載最新版 cvs -d:pserver:anonymousboost.cvs.sourceforge.net:/cvsroot/boost login [詢問密碼時,直接輸入 Enter 略過] cvs …

Android之編譯提示error: Apostrophe not preceded by

1 問題 as編譯提示錯誤如下 error: Apostrophe not preceded by 2 原因 字符串資源文件里面value包含一個單引號 <string name"key">Don t ....</string> 2 解決辦法 1) 加雙引號 <string name"key">"Don t ...."</s…

【ArcObject開發】實驗:ArcGIS Desktop開發方式入門基礎教程

一、實驗目的: 熟練掌握ArcGIS Desktop開發方式。 二、實驗準備: 學習ArcGIS Desktop定制步驟;熟悉VBA編程環境、Active DLL和Active EXE開發一般過程。 三、實驗內容: (1)描述在ArcGIS Desktop環境下定制窗體界面的一般步驟;(2)在VBA環境下編寫宏,實現圖層視圖…

C# WPF后臺動態添加控件(經典)

概述在Winform中從后臺添加控件相對比較容易&#xff0c;但是在WPF中&#xff0c;我們知道界面是通過XAML編寫的&#xff0c;如何把后臺寫好的控件動態添加到前臺呢&#xff1f;本節舉例介紹這個問題。這里要用到UniformGrid布局&#xff0c;UniformGrid 是一種橫向的網格分割、…

Android Button監聽的方式

Android Button的幾種監聽方式 1、一個Button對應一個監聽 1&#xff09;xml文件中綁定監聽 <Buttonandroid:id"id/btn_test"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"test listener"a…

hdu 5441 (并查集)

題意&#xff1a;給你n個點&#xff0c;m條邊構成無向圖。q個詢問&#xff0c;每次一個值&#xff0c;求有多少條路&#xff0c;路中的邊權都小于這個值 a->b 和 b->a算兩種 思路&#xff1a;把權值從小到大排序&#xff0c;詢問從小到大排序&#xff0c;如果相連則用并查…

【Envi風暴】Envi 5.4遙感影像鑲嵌原來如此簡單!

圖像鑲嵌指是在一定的數學基礎控制下,把多景相鄰的遙感圖像拼接成一個大范圍、無縫圖像的過程。 Envi的圖像鑲嵌功能提供交互式的方式將沒有地理坐標或者地理坐標的多幅圖像合并,生成一幅單一的合成圖像。鑲嵌功能提供了透明處理、勻色、羽化等功能。 下面演示基于地理坐標(…

[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯

一、學習目標 了解圖片的通道與數組結構了解使用numpy創建一個圖片了解使用numpy對圖片的一般操作方法 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的hel…

java 常用類庫_JAVA(三)JAVA常用類庫/JAVA IO

成鵬致遠 |lcw.cnblog.com|2014-02-01JAVA常用類庫1.StringBufferStringBuffer是使用緩沖區的&#xff0c;本身也是操作字符串的&#xff0c;但是與String類不同&#xff0c;String類的內容一旦聲明之后則不可改變&#xff0c;改變的只是其內存地址的指向&#xff0c;而StringB…

Error: package or namespace load failed for ‘rJava’:

https://stackoverflow.com/questions/30738974/rjava-load-error-in-rstudio-r-after-upgrading-to-osx-yosemite 安裝好的“xlsx”不能正常加載 library("xlsx") 報錯&#xff1a; 載入需要的程輯包&#xff1a;rJava Error: package or namespace load failed for…

Android之國際化部分文字生效而部分文字沒有生效的坑

1 問題 Android國際化我們知道只要在res目錄下面&#xff0c;創建不同國家的文件夾然后&#xff0c;把不同國家對于的語言以鍵值對的方式寫進strings.xml文件就行&#xff0c;這是一個非常簡單的操作&#xff0c;但是今天遇到了一個很奇葩的問題&#xff0c;在部分手機&#x…

【中間件】c#/.net使用GZY.Quartz.MUI搭建可視化的定時任務面板

GZY.Quartz.MUI是在github上開源的aspnetcore項目, 它旨在幫助開發人員通過面板來設置定時任務&#xff0c;主要想做的就是:像swaggerUI一樣,項目入侵量小,僅需要在Startup中注入的UI組件官方地址:https://www.cnblogs.com/GuZhenYin/p/15745002.html主要功能1.增加本地json持久…

Python學習筆記之字典

一、創建和使用字典 1、創建字典 phonebook{Alice:2341,Beth:9102,Cecil:3258} 2、dict,通過映射創建字典 >>> items[(name,Gumby),(age,34)] >>> ddict(items) >>> d 顯示&#xff1a;{name:Gumby,age:34} dict&#xff0c;通過關鍵字創建字典 >…