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

OpenCV中圖像與視頻的基礎(chǔ)操作總結(jié)

 更新時間:2023年06月16日 16:45:26   作者:繁依Fanyi  
在計算機視覺領(lǐng)域,OpenCV是一款廣泛使用的開源庫,本文為大家介紹了如何使用OpenCV進行這些操作,希望能幫助你更好地掌握圖像處理和視覺任務(wù)的開發(fā)技巧

引言

在計算機視覺領(lǐng)域,OpenCV是一款廣泛使用的開源庫,用于圖像處理和計算機視覺任務(wù)。當(dāng)你開始使用OpenCV時,了解如何創(chuàng)建和顯示窗口,以及加載和保存圖片是至關(guān)重要的基礎(chǔ)知識。本文將介紹如何使用OpenCV進行這些操作,幫助你更好地掌握圖像處理和視覺任務(wù)的開發(fā)技巧。

創(chuàng)建和顯示窗口

創(chuàng)建和顯示窗口是圖像處理中的重要步驟之一。在OpenCV中,你可以使用一些簡單而強大的函數(shù)來完成這些操作。讓我們來詳細(xì)了解一下這些函數(shù):

  • namedWindow() - 創(chuàng)建一個窗口,并指定窗口的名稱和類型。
  • resizeWindow() - 調(diào)整窗口的大小,接受窗口名稱、寬度和高度作為參數(shù)。
  • imshow() - 在指定的窗口中顯示圖像,接受窗口名稱和要顯示的圖像作為參數(shù)。
  • waitKey() - 等待鍵盤輸入,接受等待時間(以毫秒為單位)作為參數(shù),0表示無限等待用戶的鍵盤輸入。
  • destroyAllWindows() - 關(guān)閉所有窗口。

下面是一個完整的示例代碼:

import cv2  
cv2.namedWindow('new', cv2.WINDOW_NORMAL)  
cv2.resizeWindow('new', 640, 480)  
cv2.imshow("new", 0)  
key = cv2.waitKey(0)  
if(key == 'q'):  
	exit()  
cv2.destroyAllWindows()

如何通過 OpenCV 加載圖片問題

加載圖像是使用 OpenCV 進行圖像處理的常見操作之一。在下面的示例中,我們將了解如何使用 OpenCV 加載圖像:

1.im == image - 在代碼中,im代表圖像對象,通常用于存儲加載的圖像數(shù)據(jù)。

2.imread(path, flag) - 這是一個用于讀取圖像文件的函數(shù)。它接受兩個參數(shù):path表示圖像文件的路徑,flag表示讀取圖像的方式。常見的flag選項包括:

  • cv2.IMREAD_COLOR:加載彩色圖像。
  • cv2.IMREAD_GRAYSCALE:以灰度模式加載圖像。
  • cv2.IMREAD_UNCHANGED:加載圖像,包括 alpha 通道。

在下面的示例代碼中,我們將加載名為 sample.jpg 的圖像文件并顯示出來:

import cv2
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
img = cv2.imread('sample.jpg')
cv2.imshow('img', img)
key = cv2.waitKey(0)
if key == ord('q'):
    exit()
cv2.destroyAllWindows()

加載圖片存在的問題

在原始代碼中,存在一些問題需要解決,包括語法檢測、跨平臺路徑訪問以及程序退出邏輯。下面是對這些問題進行優(yōu)化的詳細(xì)解釋和示例代碼:

存在的問題:

1.語法檢測有問題:原始代碼中的縮進存在問題,影響代碼的可讀性和執(zhí)行。

2.Windows 下訪問圖片的路徑與 Mac/Linux 不同:在不同的操作系統(tǒng)中,訪問文件的路徑表示方式可能有所差異。需要注意在不同平臺上正確指定圖像文件的路徑。

3.程序退出的邏輯有問題:原始代碼中使用key == 'q'來檢測用戶是否按下 ‘q’ 鍵退出程序,但實際上waitKey()函數(shù)返回的是一個整數(shù)值。正確的做法是將鍵碼與 'q' 的 ASCII 碼值進行比較。

以下是優(yōu)化后的代碼示例:

import cv2
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
img = cv2.imread('sample.jpg')
cv2.imshow('img', img)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
    exit()
cv2.destroyAllWindows()

通過以上改進,我們解決了原始代碼中存在的語法檢測、跨平臺路徑訪問和程序退出邏輯的問題。這樣的優(yōu)化使代碼更具可讀性和可靠性。

如何通過 OpenCV 保存圖片

在OpenCV中,可以使用imwrite()函數(shù)來保存圖片。該函數(shù)接受兩個參數(shù):要保存的文件名和要保存的圖像(以O(shè)penCV中的Mat類型表示)。你可以指定保存的文件名和文件格式(如.jpg、.png等),并將圖像數(shù)據(jù)作為參數(shù)傳遞給imwrite()函數(shù),即可將圖像保存到指定的文件中。

imwrite(name, img)

  • name,要保存的文件名
  • img,是 Mat 類型
import cv2  
cv2.namedWindow('img', cv2.WINDOW_NORMAL)  
img = cv2.imread('sample.jpg')  
cv2.imshow("img", img)  
key = cv2.waitKey(0)  
if(key & 0xFF == ord('q')):  
	cv2.destroyAllWindows()  
elif(key & 0xFF == ord('s')):  
	cv2.imwrite('sample.png', img) # 改了一下文件格式

改善后的代碼:

import cv2  
cv2.namedWindow('img', cv2.WINDOW_NORMAL)  
img = cv2.imread('sample.jpg')  
while True:  
cv2.imshow("img", img)  
key = cv2.waitKey(0)  
if(key & 0xFF == ord('q')):  
	break  
elif(key & 0xFF == ord('s')):  
	cv2.imwrite('sample.png', img) # 改了一下文件格式  
else:  
	print(key)  
cv2.destroyAllWindows()

如何利用 OpenCV 從攝像頭采集視頻(讀取視頻文件)

在許多計算機視覺應(yīng)用中,從攝像頭采集視頻是一個常見的任務(wù)。OpenCV提供了簡單而強大的函數(shù)來實現(xiàn)這個目標(biāo)。下面我們將介紹如何利用OpenCV從攝像頭讀取視頻幀。

VideoCapture():用于獲取視頻設(shè)備。它接受一個參數(shù)index,表示要使用的視頻設(shè)備的索引。通常情況下,索引為0表示使用默認(rèn)的攝像頭。

cap.read():用于從攝像頭讀取視頻幀。

  • 返回兩個值,第一個為狀態(tài)值,讀到幀為 true
  • 第二個值為視頻幀

cap.release():用于釋放VideoCapture對象。在程序結(jié)束時,應(yīng)該調(diào)用該函數(shù)釋放占用的資源。

下面是一個完整的示例代碼,展示了如何利用OpenCV從攝像頭采集視頻并實時顯示:

import cv2
# 創(chuàng)建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)
# 獲取視頻設(shè)備
cap = cv2.VideoCapture(0)
while True:
    # 從攝像頭讀視頻幀
    ret, frame = cap.read()
    # 將視頻幀在窗口中顯示
    cv2.imshow('video', frame)
    # 等待鍵盤時間,如果為q,退出
    key = cv2.waitKey(1)    # 設(shè)置1ms,最低為1ms
    if(key & 0xFF == ord('q')):
        break
# 釋放 VideoCapture
cap.release()
cv2.destroyAllWindows()

如何從多媒體文件中讀取視頻幀(讀取視頻文件)

除了從攝像頭采集視頻幀,OpenCV還提供了讀取視頻文件中的視頻幀的功能。下面我們將介紹如何使用cv2.VideoCapture()函數(shù)從多媒體文件中讀取視頻幀。

cv2.VideoCapture() 從視頻文件中讀取視頻幀

下面是一個完整的示例代碼,展示了如何從視頻文件中讀取視頻幀并顯示:

import cv2
# 創(chuàng)建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)
# 獲取視頻設(shè)備/從視頻文件中讀取視頻幀
cap = cv2.VideoCapture("sample.mp4")
while True:
    # 從攝像頭讀視頻幀
    ret, frame = cap.read()
    # 將視頻幀在窗口中顯示
    cv2.imshow('video', frame)
    # 等待鍵盤時間,如果為q,退出
    key = cv2.waitKey(40)    # 設(shè)置1ms,最低為1ms
    if(key & 0xFF == ord('q')):
        break
# 釋放 VideoCapture
cap.release()
cv2.destroyAllWindows()

如何將視頻數(shù)據(jù)錄制成多媒體文件(視頻錄制)

OpenCV提供了VideoWriter類,可以將視頻數(shù)據(jù)錄制成多媒體文件。

VideoWriter

  • 參數(shù)一為輸出文件
  • 參數(shù)二為多媒體文件格式(VideoWriter_fourcc
  • 參數(shù)三為幀率
  • 參數(shù)四為分辨率大小

write

release

下面是使用VideoWriter類進行視頻錄制的示例代碼:

import cv2
# 創(chuàng)建 VideoWriter 為寫多媒體文件
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
vw = cv2.VideoWriter('./out.mp4', fourcc, 25, (1280, 720))   # 分辨率要按照真實攝像頭分辨率填寫
# 創(chuàng)建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)
# 獲取視頻設(shè)備/從視頻文件中讀取視頻幀
cap = cv2.VideoCapture(0)
while True:
    # 從攝像頭讀視頻幀
    ret, frame = cap.read()
    # 將視頻幀在窗口中顯示
    cv2.imshow('video', frame)
    # 寫數(shù)據(jù)到多媒體文件
    vw.write(frame)
    # 等待鍵盤時間,如果為q,退出
    key = cv2.waitKey(1)    # 設(shè)置1ms,最低為1ms
    if(key & 0xFF == ord('q')):
        break
# 釋放 VideoCapture
cap.release()
# 釋放VideoWriter
vw.release()
cv2.destroyAllWindows()

代碼優(yōu)化

在下面的代碼中,我們對代碼進行了優(yōu)化以解決一些問題:

  • 顯示窗口為什么變大了?
  • 使用 isOpened() 判斷攝像頭是否已打開
  • 采集數(shù)據(jù)時要判斷數(shù)據(jù)是否獲取到了
import cv2
# 創(chuàng)建 VideoWriter 為寫多媒體文件
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
vw = cv2.VideoWriter('./out.mp4', fourcc, 25, (1280, 720))   # 分辨率要按照真實攝像頭分辨率填寫
# 創(chuàng)建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)
# 獲取視頻設(shè)備/從視頻文件中讀取視頻幀
cap = cv2.VideoCapture(0)
while cap.isOpened():   # ?判斷攝像頭是否打開
    # 從攝像頭讀視頻幀
    ret, frame = cap.read()
    if ret == True: # ?判斷是否獲取到數(shù)據(jù)
        # 將視頻幀在窗口中顯示
        cv2.imshow('video', frame)
        cv2.resizeWindow('video', 640, 480) # ?窗口變大了
        # 寫數(shù)據(jù)到多媒體文件
        vw.write(frame)
        # 等待鍵盤時間,如果為q,退出
        key = cv2.waitKey(1)    # 設(shè)置1ms,最低為1ms
        if(key & 0xFF == ord('q')):
            break
    else:
        break
# 釋放 VideoCapture
cap.release()
# 釋放VideoWriter
vw.release()
cv2.destroyAllWindows()

OpenCV 控制鼠標(biāo)

下面將了解如何使用 OpenCV 控制鼠標(biāo)。具體來說,我們將了解如何設(shè)置鼠標(biāo)回調(diào)函數(shù),以便在鼠標(biāo)事件發(fā)生時執(zhí)行特定的操作。

設(shè)置鼠標(biāo)回調(diào)函數(shù)

setMouseCallback(winname, callback, userdata)

callback(event, x, y, flags, userdata)

  • event:鼠標(biāo)移動,按下左鍵
  • x,y:鼠標(biāo)左鍵
  • flags:鼠標(biāo)鍵及組合鍵

下面是一個完整的示例代碼,演示了如何設(shè)置鼠標(biāo)回調(diào)函數(shù)并在窗口中顯示鼠標(biāo)事件的信息:

import cv2
import numpy as np
# 鼠標(biāo)回調(diào)函數(shù)
def mouse_callback(event, x, y, flags, userdata):
    print(event, x, y, flags, userdata)
# mouse_callback(1, 100, 100, 16, "666")
# 創(chuàng)建窗口
cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse', 640, 360)
# 設(shè)置鼠標(biāo)回調(diào)
cv2.setMouseCallback('mouse', mouse_callback, "123")
# 顯示窗口和背景
img = np.zeros((360, 640, 3), np.uint8) # 全黑圖片
while True:
    cv2.imshow('mouse', img)
    key = cv2.waitKey(1)
    if key & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()

OpenCV 中的 TrackBar 控件

TrackBar 是 OpenCV 提供的一個圖形用戶界面控件,用于在窗口中創(chuàng)建滑動條,通過滑動條可以動態(tài)調(diào)整某個參數(shù)的值。下面將介紹如何在 OpenCV 中使用 TrackBar 控件。

createTrackbar

  • trackbarname,winname
  • value:trackbar 當(dāng)前值
  • count:最小值為0,最大值為 count
  • callback,userdata

getTrackbarPos

  • 輸入?yún)?shù):trackbarname
  • 輸入?yún)?shù):winname
  • 輸出:當(dāng)前值

在下面代碼中,我們將創(chuàng)建了一個名為 ‘trackbar’ 的窗口,并在其中創(chuàng)建了三個 TrackBar,分別用于控制紅、綠、藍(lán)三個通道的值。每個 TrackBar 的取值范圍為 0~255。我們還創(chuàng)建了一個背景圖片,其顏色將根據(jù) TrackBar 的值進行實時更新。

import cv2
import numpy as np
def callback():
    pass
# 創(chuàng)建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
# 創(chuàng)建 trackbar
cv2.createTrackbar('R', 'trackbar', 0, 255, callback)
cv2.createTrackbar('G', 'trackbar', 0, 255, callback)
cv2.createTrackbar('B', 'trackbar', 0, 255, callback)
# 創(chuàng)建一個背景圖片
img = np.zeros((480, 640, 3), np.uint8) # 黑色背景
while True:
    # 獲取當(dāng)前 trackbar 的值
    r = cv2.getTrackbarPos('R', 'trackbar')
    g = cv2.getTrackbarPos('G', 'trackbar')
    b = cv2.getTrackbarPos('B', 'trackbar')
    # 改變背景圖片顏色
    img[:] = [b, g, r]  # img[:] 表示所有像素
    cv2.imshow('trackbar', img)
    key = cv2.waitKey(10)
    if key & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()

總結(jié)

這篇博客簡單介紹了 OpenCV 的OpenCV 圖像與視頻的基礎(chǔ)操作,包括窗口創(chuàng)建、圖像加載和保存、攝像頭視頻采集以及多媒體文件錄制等內(nèi)容。同時,還提供了代碼優(yōu)化技巧以及鼠標(biāo)交互和 TrackBar 控件的應(yīng)用。通過閱讀這篇博客,讀者可以全面了解 OpenCV 的功能和用法,掌握圖像處理的基本技能。

以上就是OpenCV中圖像與視頻的基礎(chǔ)操作總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于OpenCV圖像視頻操作的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python和GDAL給圖片加坐標(biāo)系的實現(xiàn)思路(坐標(biāo)投影轉(zhuǎn)換)

    使用Python和GDAL給圖片加坐標(biāo)系的實現(xiàn)思路(坐標(biāo)投影轉(zhuǎn)換)

    這篇文章主要介紹了使用Python和GDAL給圖片加坐標(biāo)系的實現(xiàn)思路(坐標(biāo)投影轉(zhuǎn)換),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Python常用工具之音頻調(diào)整音量

    Python常用工具之音頻調(diào)整音量

    這篇文章主要介紹一個可以將音頻提升音量的python常用工具,代碼具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下
    2021-11-11
  • Django模型驗證器介紹與源碼分析

    Django模型驗證器介紹與源碼分析

    這篇文章主要給大家介紹了關(guān)于Django模型驗證器與源碼分析的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 學(xué)生如何注冊Pycharm專業(yè)版以及pycharm的安裝

    學(xué)生如何注冊Pycharm專業(yè)版以及pycharm的安裝

    這篇文章主要介紹了學(xué)生如何注冊Pycharm專業(yè)版以及pycharm的安裝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python基礎(chǔ)教程之名稱空間以及作用域

    Python基礎(chǔ)教程之名稱空間以及作用域

    變量是擁有匹配對象的名字(標(biāo)識符),命名空間是一個包含了變量名稱們(鍵)和它們各自相應(yīng)的對象們(值)的字典,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之名稱空間以及作用域的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • python七種方法判斷字符串是否包含子串

    python七種方法判斷字符串是否包含子串

    這篇文章主要介紹了python七種方法判斷字符串是否包含子串,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • 舉例詳解Python中循環(huán)語句的嵌套使用

    舉例詳解Python中循環(huán)語句的嵌套使用

    這篇文章主要介紹了舉例詳解Python中循環(huán)語句的嵌套使用,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 基于python實現(xiàn)弱密碼檢測工具

    基于python實現(xiàn)弱密碼檢測工具

    Python中一個強大的加密模塊,提供了許多常見的加密算法和工具,本文我們將使用Python編寫一個弱密碼檢測工具,感興趣的小伙伴可以了解一下
    2024-01-01
  • Python如何實用File文件的實現(xiàn)

    Python如何實用File文件的實現(xiàn)

    本文主要介紹了Python如何實用File文件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python中黃金分割法實現(xiàn)方法

    python中黃金分割法實現(xiàn)方法

    這篇文章主要介紹了python中黃金分割法實現(xiàn)方法,涉及Python數(shù)學(xué)計算的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評論