欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用Python的OpenCV庫處理圖像和視頻

 更新時間:2022年10月28日 11:04:30   作者:woshicver  
基于opencv可以顯示圖片,并進行相應(yīng)的處理,下面這篇文章主要給大家介紹了關(guān)于如何使用Python的OpenCV庫處理圖像和視頻的相關(guān)資料,需要的朋友可以參考下

介紹

眾所周知,計算機視覺在機器學(xué)習(xí)和人工智能領(lǐng)域獲得了巨大的普及。圖像識別技術(shù)允許計算機處理比人眼更多的信息,通常更快、更準(zhǔn)確,或者只是在人們不參與觀看的情況下處理。因此,你可能想知道機器如何學(xué)習(xí)和解釋視覺世界。

在本文中,我將介紹如何使用 Python 的 OpenCV 庫開始處理圖像和視頻。我們將涵蓋以下主題:

  • 計算機視覺簡介
  • OpenCV 庫及其應(yīng)用簡介
  • 如何使用 OpenCV 庫處理圖像和視頻

計算機視覺

它是人工智能和計算機科學(xué)的一個領(lǐng)域,訓(xùn)練計算機理解視覺世界。它是機器學(xué)習(xí)的主要組成部分之一。它處理自然世界的圖像(高維數(shù)據(jù))。它執(zhí)行各種任務(wù),例如獲取、分析和處理以理解圖像并將其轉(zhuǎn)換為數(shù)字或符號信息。

當(dāng)今的計算機視覺算法基于模式識別,通常依賴于卷積神經(jīng)網(wǎng)絡(luò) (CNN)。由于該領(lǐng)域的各種進步,計算機視覺正在蓬勃發(fā)展,并且它的受歡迎程度在過去幾年中呈指數(shù)增長。

計算機視覺的應(yīng)用范圍從缺陷檢測到入侵者檢測、口罩檢測到腫瘤檢測、作物監(jiān)測到植物監(jiān)測、車輛分類到交通流量分析等。該技術(shù)主要應(yīng)用于零售和制造、交通、媒體、農(nóng)業(yè)、醫(yī)療保健、體育、銀行、增強現(xiàn)實、家庭安全等。

OpenCV

Python 包含一個名為 OpenCV 的庫,用于在計算機視覺領(lǐng)域工作。它是一個開源庫,于 1999 年推出。我們可以執(zhí)行圖像處理、圖像分析、視頻分析等任務(wù)。該庫主要用 C++ 編寫,具有 C++、Python、Java 和 MATLAB 等接口。

應(yīng)用:

  • 2D 和 3D 特征工具包
  • 視頻/圖像搜索檢索
  • 人臉識別系統(tǒng)
  • 手勢識別
  • 移動機器人
  • 對象識別
  • 醫(yī)學(xué)影像分析
  • 運動追蹤
  • 增強現(xiàn)實

安裝

使用 pip 命令可以輕松安裝 OpenCV,如下所示

pip install opencv-python

使用 OpenCV 處理圖像

在處理圖像時,OpenCV 有許多可以對圖像執(zhí)行的操作。其中,我將討論:

  1. 讀取圖像
  2. 調(diào)整圖像大小
  3. 旋轉(zhuǎn)圖像
  4. 翻轉(zhuǎn)圖像
  5. 重寫圖像
  6. 裁剪圖像
  7. 在圖像上繪制各種形狀

1. 從文件中讀取圖像

  1. 使用函數(shù)imread()讀取圖片 (支持BMP、jpeg、tiff、png、便攜圖片格式等)
  2. 為了顯示我們在上一步中讀取的圖像,我們使用函數(shù)“imshow()”。這個函數(shù)的第一個參數(shù)是標(biāo)題,第二個是我們讀到的圖像。
  3. waitkey() 函數(shù)顯示一個窗口幾毫秒。毫秒數(shù)作為參數(shù)傳遞給函數(shù)。如果 0 作為參數(shù)傳遞,它將永遠等待,直到按下任何鍵。
  4. 最后,destroyAllWindows() 將圖像窗口顯示后從內(nèi)存中刪除。

例子:

python 代碼:

import cv2
 
img=cv2.imread('img.jpeg')
cv2.imshow('Image',img)
cv2.waitKey()
cv2.destroyAllWindows()

輸出

8fcf702413cc22140704667f34159ac5.png

2. 調(diào)整圖像大?。?/h3>

在圖像處理中,經(jīng)常需要調(diào)整圖像的大小。OpenCV 為我們提供了幾種輕松重新縮放圖像的方法。讓我們通過一個例子來理解。

例子:

img2=cv2.resize(img,(400,400))
#resize by a fraction of original size
img3=cv2.resize(img,(0,0),fx=0.5,fy=0.6)
#using INTER_AREA to shrink the image
img4=cv2.resize(img,(600,700),interpolation=cv2.INTER_AREA)

3. 旋轉(zhuǎn)圖像

使用 OpenCV 旋轉(zhuǎn)圖像的語法是

M=cv2.getRotationMatrix2D(center, angle,scale)

然后我們使用方法

cv2.wrapAffine(src,M, (h,w))

讓我們通過一個例子來深入了解:

例子:

#calculate height and width to get center
(h,w)=img.shape[:2]
center=(w/2,h/2)
 
#rotate by 90 degrees
M = cv2.getRotationMatrix2D(center, 90, 1.0)
img90 = cv2.warpAffine(img, M, (h, w))
 
#rotate by 180 degrees
M = cv2.getRotationMatrix2D(center, 180, 1.0)
img180 = cv2.warpAffine(img, M, (h, w))
 
#rotate by 270 degrees
M = cv2.getRotationMatrix2D(center, 270, 1.0)
img270 = cv2.warpAffine(img, M, (h, w))

34c7e0af8647c752d14a76f26d2e0446.jpeg

4. 翻轉(zhuǎn)圖像:

要翻轉(zhuǎn)圖像,我們使用函數(shù) cv2.flip() 并傳遞參數(shù),即圖像和翻轉(zhuǎn)代碼(水平或垂直)

例子:

#flip- vertical axes
img=cv2.flip(img,0) 
#flip- horizontal axes
img=cv2.flip(img,1)

9e581f15a328c079c06a495c68fd5ab7.jpeg

5. 重寫圖像

要將圖像重寫為新文件,我們使用函數(shù) imwrite() 如下:

cv2.imwrite('new_img.jpg',img)

6. 裁剪圖像

#crop from top
img=img[0:100,0:100]
#crop by specifying height and width
img=img[50:200,50:100]

7d058824699703414b838ee6563a971c.jpeg

7. 繪制形狀

使用 OpenCV,我們可以使用不同的函數(shù)在圖像上快速繪制各種形狀,如圓形、矩形、多邊形等。讓我們用一個例子來理解:

例子:

#creating a blank image
import cv2 as cv2
import numpy as np
img=np.zeros((500,500,3),dtype=float)
#changing the color of the image to green
img[:]=0,255,0
#Red
img[:]=0,0,255
#changing the color of a particular portion
img[200:300,300:450]=0,255,0
#drawing a rectangle
cv2.rectangle(img,(100,100),(180,180),color=(255,0,0),thickness=5)
#draw a circle with filling the color
cv2.circle(img,center=(100,300),radius=60,color=(0,255,0),thickness=-1)
#drawing a line 
cv2.line(img,(0,0),(317,356),thickness=3,color=(0,255,0))
#adding text
cv2.putText(img,org=(50,50),fontScale=3,color=(255,0,0)
,thickness=2,lineType=cv2.LINE_AA,text="IMAGES", fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL)
cv2_imshow(img)
cv2.waitKey(0)

e97758f81813a3bdff9bea40ad456e7f.png

使用 OpenCV 處理視頻

視頻是幀序列或圖像序列。圖像通常采用 BGR(藍、綠、紅)的形式。每個像素的值都在 0-255 之間。要開始使用 OpenCV 處理視頻,我們使用以下函數(shù):

Cv2.VideoCapture():它建立與視頻的連接。它帶有一個參數(shù),該參數(shù)指示是使用內(nèi)置攝像頭還是附加攝像頭。值“0”表示內(nèi)置攝像頭。

Cap.read():這個方法可以讓我們得到一個幀。

Cv2.cvtColor():允許你更改圖像使用的顏色模型。這包括從 BGR 轉(zhuǎn)換為 RGB 和灰度。

在處理視頻方面,在本文中,我們將學(xué)習(xí)

  1. 如何捕獲視頻幀的不同屬性
  2. 讀取視頻文件
  3. 寫視頻

1. 捕獲視頻幀的屬性:

讓我們看幾個捕獲視頻屬性的示例。

要捕獲幀形狀:

frame.shape
(2160, 3840, 3)
plt.imshow(frame)
plt.show()

要更改框架的顏色,我們使用函數(shù) cv2.cvtColor(),如下所示:

#changing the color of the frame
plt.show()
plt.imshow(cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY))

de074b28336c1c21270ccbdba5bb1f94.png

為了捕捉視頻,我們使用函數(shù) cv2.VideoCapture()

cap=cv2.VideoCapture('/content/video.mp4')
cap.read()

要獲取框架的高度,我們使用 cap.get() 函數(shù)如下:

#height
cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

為了獲得框架的寬度,我們使用:

#width
cap.get(cv2.CAP_PROP_FRAME_WIDTH)

要獲取幀數(shù),我們使用函數(shù) cap.get() 如下:

#number of frames
cap.get(cv2.CAP_PROP_FRAME_COUNT)

為了獲得每秒的幀數(shù),我們使用

#number of frames per sec
cap.get(cv2.CAP_PROP_FPS)

2. 讀取視頻文件

  1. 導(dǎo)入 cv2
  2. 然后我們使用函數(shù) cv2.VideoCapture() 來捕捉視頻。
  3. 接下來,我們循環(huán)遍歷每一幀并使用函數(shù) cap.read() 讀取幀。
  4. 為了顯示每一幀,我們使用方法 cv2.imshow()。
  5. 最后,我們使用 waitKey() 函數(shù)中斷循環(huán),當(dāng)用戶按下任意鍵時,該函數(shù)會中斷循環(huán)。
  6. destroyAllWindows() 函數(shù)將關(guān)閉窗口。

例子:

#importing dependencies
import cv2
from matplotlib import pyplot as plt
#establish capture
cap=cv2.VideoCapture('/content/video.mp4')
#loop through each frame
while(cap.isOpened()):
  ret,frame=cap.read()
  frame=cv2.resize(frame,(1200,700))
  cv2.imshow(‘Video',frame)
  if cv2.waitKey(10) & 0xFF == ord('q'):
    break
#close down everything
cap.release()
cv2.destroyALLWindows()

3. 編寫視頻文件

  1. 導(dǎo)入 cv2
  2. 使用函數(shù) cv2.VideoCapture() 捕獲視頻
  3. 然后我們使用函數(shù) cv2.VideoWriter 來編寫視頻。該函數(shù)將參數(shù)作為
    1. cv2.VideoWriter(filename, fourcc, fps, framesize)
    2. filename - 捕獲的輸入視頻文件
    3. Fourcc - 用于指定視頻編解碼器的代碼
    4. fps - 每秒幀數(shù)
    5. framesize - 視頻框的高度和寬度
  4. 接下來,我們循環(huán)遍歷每一幀并使用對象 video_writer 來寫入幀。
  5. 最后,我們使用 waitKey() 函數(shù)來打破循環(huán)
  6. 使用函數(shù) destroyAllWindows() 關(guān)閉窗口
import cv2
from google.colab.patches import cv2_imshow
cap=cv2.VideoCapture('/content/video.mp4')
height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
fps=int(cap.get(cv2.CAP_PROP_FPS))
frame_size = (width,height)
video_writer= cv2.VideoWriter('/content/output.avi',cv2.VideoWriter_fourcc('M','J','P','G'), fps, frame_size)
for frame_idx in range(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))):
  ret,frame=cap.read()
  gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
  video_writer.write(gray)
  if cv2.waitKey(10) & 0xFF== ord('q'):
    break
cap.release()
cv2.destroyALLWindows()

結(jié)論

本文幫助你創(chuàng)建了與計算機視覺相關(guān)的出色應(yīng)用程序。希望你現(xiàn)在對以下內(nèi)容有一個很好的了解:

  • 什么是計算機視覺
  • OpenCV 庫的應(yīng)用
  • 使用 OpenCV 庫處理圖像
  • 使用 OpenCV 庫處理視頻

總結(jié)

到此這篇關(guān)于如何使用Python的OpenCV庫處理圖像和視頻的文章就介紹到這了,更多相關(guān)Python OpenCV處理圖像和視頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python實現(xiàn)生成用戶信息

    使用python實現(xiàn)生成用戶信息

    這篇文章主要介紹了使用python實現(xiàn)生成用戶信息的相關(guān)代碼,非常的簡單實用,需要的朋友可以參考下
    2017-03-03
  • Python 腳本獲取ES 存儲容量的實例

    Python 腳本獲取ES 存儲容量的實例

    今天小編就為大家分享一篇Python 腳本獲取ES 存儲容量的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • OpenCV立體圖像深度圖Depth Map基礎(chǔ)

    OpenCV立體圖像深度圖Depth Map基礎(chǔ)

    這篇文章主要為大家介紹了OpenCV立體圖像深度圖Depth Map基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • python解決Fedora解壓zip時中文亂碼的方法

    python解決Fedora解壓zip時中文亂碼的方法

    這篇文章給大家介紹了如何利用python解決Fedora解壓zip時中文亂碼的方法,對大家具有一定參考借鑒價值,有需要的朋友們可以參考學(xué)習(xí),下面來一起看看吧。
    2016-09-09
  • Python實現(xiàn)自動化郵件發(fā)送過程詳解

    Python實現(xiàn)自動化郵件發(fā)送過程詳解

    這篇文章主要介紹了如何利用Python實現(xiàn)自動化郵件發(fā)送,可以讓你擺脫繁瑣的重復(fù)性業(yè)務(wù),可以節(jié)省非常多的時間。感興趣的小伙伴可以試一試
    2022-01-01
  • Python統(tǒng)計列表中每個元素出現(xiàn)次數(shù)的4種實現(xiàn)

    Python統(tǒng)計列表中每個元素出現(xiàn)次數(shù)的4種實現(xiàn)

    本文主要介紹了Python統(tǒng)計列表中每個元素出現(xiàn)次數(shù)的4種實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python 字符串常用方法匯總詳解

    python 字符串常用方法匯總詳解

    這篇文章主要介紹了python 字符串方法匯總詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python_array[0][0]與array[0,0]的區(qū)別詳解

    python_array[0][0]與array[0,0]的區(qū)別詳解

    今天小編就為大家分享一篇python_array[0][0]與array[0,0]的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python繪圖實現(xiàn)顯示中文

    Python繪圖實現(xiàn)顯示中文

    今天小編就為大家分享一篇Python繪圖實現(xiàn)顯示中文,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度)

    python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度)

    這篇文章主要介紹了python pytorch模型轉(zhuǎn)onnx模型的全過程(多輸入+動態(tài)維度),本文給大家記錄記錄了pt文件轉(zhuǎn)onnx全過程,簡單的修改即可應(yīng)用,結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-03-03

最新評論