最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

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

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

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

下面是一個(gè)完整的示例代碼:

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 進(jìn)行圖像處理的常見操作之一。在下面的示例中,我們將了解如何使用 OpenCV 加載圖像:

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

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

  • 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()

加載圖片存在的問題

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

存在的問題:

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

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

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

以下是優(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()

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

如何通過 OpenCV 保存圖片

在OpenCV中,可以使用imwrite()函數(shù)來保存圖片。該函數(shù)接受兩個(gè)參數(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 從攝像頭采集視頻(讀取視頻文件)

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

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

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

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

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

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

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)
    # 等待鍵盤時(shí)間,如果為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() 從視頻文件中讀取視頻幀

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

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)
    # 等待鍵盤時(shí)間,如果為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類進(jìn)行視頻錄制的示例代碼:

import cv2
# 創(chuàng)建 VideoWriter 為寫多媒體文件
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
vw = cv2.VideoWriter('./out.mp4', fourcc, 25, (1280, 720))   # 分辨率要按照真實(shí)攝像頭分辨率填寫
# 創(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)
    # 等待鍵盤時(shí)間,如果為q,退出
    key = cv2.waitKey(1)    # 設(shè)置1ms,最低為1ms
    if(key & 0xFF == ord('q')):
        break
# 釋放 VideoCapture
cap.release()
# 釋放VideoWriter
vw.release()
cv2.destroyAllWindows()

代碼優(yōu)化

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

  • 顯示窗口為什么變大了?
  • 使用 isOpened() 判斷攝像頭是否已打開
  • 采集數(shù)據(jù)時(shí)要判斷數(shù)據(jù)是否獲取到了
import cv2
# 創(chuàng)建 VideoWriter 為寫多媒體文件
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
vw = cv2.VideoWriter('./out.mp4', fourcc, 25, (1280, 720))   # 分辨率要按照真實(shí)攝像頭分辨率填寫
# 創(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)
        # 等待鍵盤時(shí)間,如果為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ā)生時(shí)執(zhí)行特定的操作。

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

setMouseCallback(winname, callback, userdata)

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

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

下面是一個(gè)完整的示例代碼,演示了如何設(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 提供的一個(gè)圖形用戶界面控件,用于在窗口中創(chuàng)建滑動(dòng)條,通過滑動(dòng)條可以動(dòng)態(tài)調(diào)整某個(gè)參數(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)建了一個(gè)名為 ‘trackbar’ 的窗口,并在其中創(chuàng)建了三個(gè) TrackBar,分別用于控制紅、綠、藍(lán)三個(gè)通道的值。每個(gè) TrackBar 的取值范圍為 0~255。我們還創(chuàng)建了一個(gè)背景圖片,其顏色將根據(jù) TrackBar 的值進(jìn)行實(shí)時(shí)更新。

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)建一個(gè)背景圖片
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é)

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

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

相關(guān)文章

  • Python實(shí)現(xiàn)排序方法常見的四種

    Python實(shí)現(xiàn)排序方法常見的四種

    本文給大家分享python四種常見排序方法,每種方法通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-07-07
  • python 環(huán)境搭建 及python-3.4.4的下載和安裝過程

    python 環(huán)境搭建 及python-3.4.4的下載和安裝過程

    這篇文章主要介紹了python 環(huán)境搭建 python-3.4.4的下載和安裝過程,文中給大家補(bǔ)充介紹了pycharm的基本用法,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • python Tkinter實(shí)時(shí)顯示數(shù)據(jù)功能實(shí)現(xiàn)

    python Tkinter實(shí)時(shí)顯示數(shù)據(jù)功能實(shí)現(xiàn)

    這篇文章主要介紹了python Tkinter實(shí)時(shí)顯示數(shù)據(jù)功能實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Python無法用requests獲取網(wǎng)頁源碼的解決方法

    Python無法用requests獲取網(wǎng)頁源碼的解決方法

    爬蟲獲取信息,很多時(shí)候是需要從網(wǎng)頁源碼中獲取鏈接信息的,下面這篇文章主要給大家介紹了關(guān)于Python無法用requests獲取網(wǎng)頁源碼的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Phantomjs抓取渲染JS后的網(wǎng)頁(Python代碼)

    Phantomjs抓取渲染JS后的網(wǎng)頁(Python代碼)

    phantomjs:我的理解就是它是一個(gè)無顯示的瀏覽器,也就是說除了不能顯示頁面內(nèi)容以外,瀏覽器能干的活兒它基本上都能干。下面我們就來利用他做點(diǎn)有趣的事情
    2016-05-05
  • Python的多維空數(shù)組賦值方法

    Python的多維空數(shù)組賦值方法

    下面小編就為大家分享一篇Python的多維空數(shù)組賦值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Unicode和Python的中文處理

    Unicode和Python的中文處理

    在Python語言中,Uincode字符串處理一直是一個(gè)容易讓人迷惑的問題。許多Python愛好者經(jīng)常因?yàn)楦悴磺錟nicode、UTF-8還有其它許許多多的編碼之間的區(qū)別而大傷腦筋。本文將介紹Unicode和Python的中文處理的相關(guān)知識(shí)。下面跟著小編一起來看下吧
    2017-03-03
  • Python如何處理多分隔符的字符串拆分

    Python如何處理多分隔符的字符串拆分

    在數(shù)據(jù)爆炸時(shí)代,字符串解析是每個(gè)Python開發(fā)者必備的核心技能,本文將深入解析Python中多分隔符字符串拆分的完整技術(shù)體系,需要的小伙伴可以參考下
    2025-08-08
  • 基于Python和wxPython打造一個(gè)智能日期文件夾管理工具

    基于Python和wxPython打造一個(gè)智能日期文件夾管理工具

    在日常辦公中,我們經(jīng)常需要按日期組織文件,比如每天創(chuàng)建一個(gè)以日期命名的文件夾(如20251214),將前一天的Excel文件復(fù)制過來并更新日期,今天,我將分享如何用Python的wxPython模塊打造一個(gè)智能的日期文件夾管理工具,需要的朋友可以參考下
    2025-12-12
  • Python流程控制 while循環(huán)實(shí)現(xiàn)解析

    Python流程控制 while循環(huán)實(shí)現(xiàn)解析

    這篇文章主要介紹了Python流程控制 while循環(huán)實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

景德镇市| 突泉县| 新乐市| 吉首市| 基隆市| 佛学| 新和县| 永年县| 宁武县| 新民市| 扎鲁特旗| 延长县| 毕节市| 马山县| 武义县| 灯塔市| 米林县| 岳阳县| 营口市| 和硕县| 上思县| 慈溪市| 通州区| 铜梁县| 界首市| 镇原县| 平昌县| 磐安县| 通海县| 周口市| 定西市| 西峡县| 商洛市| 清镇市| 滦平县| 保靖县| 库车县| 汪清县| 田林县| 芷江| 农安县|