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

一、學習目標

  1. 了解圖片的結構屬性
  2. 了解如何捕獲視頻
  3. 了解waitkey的使用方法

目錄

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

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

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

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

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

二、了解opencv的圖像屬性

2.1 圖像的屬性

在我們獲取到圖像后,可以獲取到圖像的大小、類型以及通道等信息;通道指的是RGB這三個顏色通道,一幅完整的圖像是由單獨的紅色圖像、單獨的綠色圖像以及單獨的藍色圖像組成;一幅圖像若綠色通道沒有,或者說關閉,它將會偏向其它兩個顏色,同理,若其它顏色通道關閉后亦是如此。

我們可以操作這些通道信息,完成對圖像的編輯。這三個通道的單獨值范圍都是0-255,顯示方式如單獨的紅色則是(255,0,0),單獨的綠色是(0,255,0)單獨的藍色則是(0,0,255),這些值對應一種數據類型uint8,表示取值范圍就是0-255.

2.2 查看圖像的寬高通道

那如何獲取到圖像的這些屬性呢?在OpenCV中獲取這些信息是十分簡單的。首先我們可以使用shape獲取圖像的長寬以及通道個數。如下代碼:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.destroyWindow("Image")
cv2.imshow("Image", img)
print(img.shape)

以上代碼中除了最后一行代碼,其余都是上一節的內容,最后一行代碼調用了讀取到的img圖片文件的shape屬性。shape屬性是img圖片的長寬和通道,當使用該屬性時將會得到長寬和通道屬性。結果如下:

在顯示的結果中可以看到,該值為1080、1620與3,其中長是1080,寬是1620,通道數是3。我們可以查看該圖片屬性得到值,對比是否一致。改圖片信息如下:

2.3 查看圖像的整體大小

得到信息后,我們還可以具體查看這個圖片的具體大小。使用size屬性可以獲取到當前圖片的具體大小值。

print(img.size)

在2.2示例代碼末尾處添加以上代碼。運行代碼我們可以看到顯示的內容如下:

我們可以發現,使用size查看大小后得到了5248800,這個數值是如何計算而來呢?我們可以通過計算器計算1080*1620的數值,當然得出的結果并不是5248800,因為我們還缺少一步,乘上3個通道值,因為我們的圖片是需要有RGB三個通道的圖片構成。最終通過計算機結果得出了大小的計算公式:長 * 寬 * 通道=size。

2.4 查看圖像通道所占的位數

我們接下來可以查看一下每個通道占的位數。使用dtype屬性可以查看每個通道數據的所占位數。

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.destroyWindow("Image")
cv2.imshow("Image", img)print(img.shape)
print(img.size)
print(img.dtype)

運行代碼我們可以看到顯示的內容如下:

在顯示結果中的最后一行可以得知,所占的位數是uint8這個類型,這個類型所代表的一個數據范圍就是0-255,以后若見到了該數據類型就可以很清楚的知道其中的數據的范圍了,表示無符號的0-255這個范圍的數據。

2.4 numpy

其實我們這個讀取過來的img對象的數據類型是numpy的數據類型。numpy是一個做科學計算的數據計算包,通過numpy可以簡單的去做很多運算。我們在讀取這個圖片時所存儲的內容就是很多個0-255的數據組成的,這就是這個圖片在這里最原始的樣子。也可以說“這就是計算機所見到的圖片的樣子”,這句話并不嚴謹,但是有利于我們在這個層次去對這些圖像數據做運算處理。

三、了解視頻讀取方法

3.1 了解視頻與圖片有什么關系

其實視頻就是很多張圖片而組成的,多張圖片呈現流暢的視覺感受我們就可以叫做視頻。越流暢,畫面的視頻更新率就越高,我們打游戲時有時候會說“卡成了ppt”,這個就是指視頻更新率不夠流暢,例如fps8,指每秒有8圖片進行顯示,fps 80則是表示有每秒有80張流暢的圖片在你眼前飄過,但是你感受不出來;這種呈現出來流程的視覺效果讓我們感受不出來是在看一張張的圖片。

我們在使用pr進行視頻剪輯的時候很容易感受到這種一張張圖片,這種沒一張張圖片我們稱為每一幀。如圖:

我們每次左右移動一個幀那么就是一張圖片,流程的圖片就形成了視頻動畫。我們還有更為熟悉的在紙上畫畫,隨后波動紙張就可以形成流程的動畫效果。

其實我們可以從這個原理得到在之后課程中對視頻中圖像識別的啟示。

3.2 了解捕捉視頻的方法

要捕捉相機視頻我們需要創建一個VideoCapture對象,VideoCapture方法可以選擇相機,并且返回一個VideoCapture對象。代碼如下:

captrue = cv2.VideoCapture(0)

在VideoCapture方法中,傳入的參數為選擇相機是哪一個,0代表第一個,若你有多個相機,則可以添加其他數字進行選擇。創建相機后將返回一個值,該值可以使用isOpened方法判斷相機是否打開,若沒有打開則返回,你可以可以在里面添加提示信息:

if not capture.isOpened():exit()

我們可以逐幀的讀取視頻信息。編寫一個while循環,使用capture的read方法。read方法將會返回2個結果,一個是是否正確讀取時的布爾值,一個是幀圖像:

while(True):ret,frame=capture.read()if not ret:break

以上代碼中,ret是讀取的正確與否,frame是幀圖像。若ret不正確則會直接跳出循環。這時我們可以使用imshow函數對幀圖形進行顯示,并且由于循環每次都在同一個窗口中進行顯示,這時將會刷新顯示,代碼如下:

cv2.imshow("vedio",frame)

由于我電腦跑不動,筆記本太老,需要添加個延時,并且延時設置為3秒,3000毫秒扥估3秒:

c=cv2.waitKey (3000)

為什么要等于c呢?這時因為我需要判斷是否按下esc鍵進行退出。waitkey可以在一定時間內等待你按下鍵并且進行記錄,esc鍵的值是27,所以代碼為:

if c==27:break

整體代碼為:

import cv2capture=cv2.VideoCapture(0)
if not capture.isOpened():exit()
while(True):ret,frame=capture.read()if not ret:breakcv2.imshow("vedio",frame)c=cv2.waitKey (3000)if c==27:break

這時可以運行代碼查看效果,如果你電腦比我的更差,嗯。。。那就延時設置更高吧。運行效果如下:

本人比較害羞所以打碼了,并且由于我設備有些問題,所以出現了點不一樣的情況,正常情況會清晰的顯示出結果的。
注:文章首發于ebaina

四、總結

  1. 了解圖片的屬性是有3個通道,分別為紅綠藍,并且可以通過shape獲取到圖片的寬高和三個通道
  2. 了解了如何計算圖片的大小,是寬高乘積再乘3
  3. 了解了一張完整的圖片是由3個單張的紅綠藍三通道圖片組成
  4. 了解捕獲視頻需要創建VideoCapture對象
  5. 了解了選擇設備在VideoCapture方法中傳入參數進行選擇
  6. 了解waitkey的可以等待并且接受輸入的按鍵值

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

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

相關文章

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;通過關鍵字創建字典 >…

iOS UI基礎-7.0 UIScrollView

概述 移動設備的屏幕大小是極其有限的&#xff0c;因此直接展示在用戶眼前的內容也相當有限.當展示的內容較多&#xff0c;超出一個屏幕時&#xff0c;用戶可通過滾動手勢來查看屏幕以外的內容,普通的UIView不具備滾動功能&#xff0c;不能顯示過多的內容。UIScrollView是一個能…

【ArcGIS風暴】緩沖區分析、疊置分析綜合實驗案例:購房區域的選擇

實驗平臺:ArcGIS 9.3實驗目的:熟練掌握A rcGIS緩沖區分析和疊置分析操作,綜合利用各項空間分析工具解決實際問題。實驗要求:對每個條件進行緩沖區分析,運用空間疊置分析對多個圖層疊加,并分等級,確定合適的區域。實驗數據:ArcEx8實驗步驟打開ArcMap,加載數據ArcEx8,如…

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

一、學習目標 了解什么是色彩空間了解opencv中色彩空間的轉換 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python opencv 計算機視覺零基…

java gui 按鍵 數組_java GUI分配數組值

好的,所以這是一個非常基本的例子.它需要更多的工作和優化,但應該讓你朝著正確的方向前進import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Point;import java.awt.Shape;im…

Android之如何實現阿拉伯版本(RTL)的recycleView的網格布局

1 問題 比如正常的recycleView的網格布局效果如下 1 2 34 5 67 8 現在需要變成這樣的效果 3 2 16 5 48 7 2 思考過程和嘗試解決方法 1)從recycleView上直接分析,看有沒有相關的方法變成這個格式,網上百度了,基本上找不到 2)既然recycleView里面有常見的幾種布局設置,…

poj1189 簡單dp

http://poj.org/problem?id1189 Description 有一個三角形木板,豎直立放。上面釘著n(n1)/2顆釘子&#xff0c;還有(n1)個格子&#xff08;當n5時如圖1&#xff09;。每顆釘子和周圍的釘子的距離都等于d&#xff0c;每一個格子的寬度也都等于d&#xff0c;且除了最左端和最右端…