OpenCV中的cv2.imshow詳解

在計算機視覺領域中,OpenCV是應用最廣泛最常用的工具之一,而cv2.imshow()函數作為OpenCV中用於顯示圖像的函數之一,又是非常常用的一個函數,我們在很多項目中都使用過該函數。那麼,本篇文章將從多個方面詳細闡述cv2.imshow()函數,希望能夠幫助讀者更好地使用OpenCV庫。

一、顯示一張圖像

cv2.imshow()函數最基本的功能是用於顯示一張圖像。


import cv2

img = cv2.imread('test.jpg')
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代碼讀取一個名為test.jpg的圖像,並使用cv2.imshow()函數進行圖像顯示。imshow()函數的第一個參數是窗口的名稱,第二個參數是待顯示的圖像。另外,cv2.waitKey()函數的主要作用是在圖像窗口中等待鍵盤輸入,而cv2.destroyAllWindows()函數用於銷毀創建的所有窗口,這裡我們可以通過鍵盤輸入ESC鍵來退出程序。

二、顯示灰度圖像

我們知道,在處理圖像時,有時候需要將圖像轉為灰度圖像進行處理。使用cv2.imshow()函數來顯示灰度圖像也非常簡單。


import cv2

img = cv2.imread('test.jpg',0)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代碼中,cv2.imread()函數的第二個參數為0表示將讀取的圖像轉換為灰度圖像,然後再使用cv2.imshow()函數進行圖像的顯示。

三、在圖像中加入文本

在圖像中加入文本是圖像處理的常見需求,使用cv2.putText()函數可以實現該功能。


import cv2

img = cv2.imread('test.jpg')
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Hello World!',(50,200), font, 2,(255,255,255),2,cv2.LINE_AA)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.putText()函數的第一個參數為要進行操作的圖像,第二個參數是要添加的文本,第三個參數是文本顯示位置,第四個參數是字體類型,第五個參數是字體大小,第六個參數是文本顏色,第七個參數是文本粗細,第八個參數是線條類型。

四、調整圖像大小

在圖像處理中,有時候需要對圖像進行縮放或者放大操作。使用cv2.resize()函數可以輕鬆實現該功能。


import cv2

img = cv2.imread('test.jpg')
resized_image = cv2.resize(img,(500,500))
cv2.imshow('image',resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代碼中,cv2.resize()函數的第一個參數是待調整的圖像,第二個參數是調整後圖像的大小。由於OpenCV的圖像大小參數是以寬度和高度來表示的,因此我們需要將調整後的寬度和高度以一個元組的形式傳遞給cv2.resize()函數。

五、調整圖像亮度和對比度

在圖像處理中,有時候需要對圖像進行亮度和對比度調整以達到更好的視覺效果,使用cv2.addWeighted()函數可以完成該功能。


import cv2
import numpy as np

img = cv2.imread('test.jpg')

alpha = 1.5
beta = 10
resized_image = cv2.addWeighted(img, alpha, np.zeros(img.shape, img.dtype), 0, beta)

cv2.imshow('image',resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.addWeighted()函數的第一個參數是待調整的圖像,第二個參數是亮度調整係數,第三個參數是一個與原圖像大小相同全0的數組,第四個參數是對比度調整係數,第五個參數是調整後的圖像。

六、調整圖像通道

在處理圖像時,有時候需要對圖像進行通道調整,使用cv2.split()函數可以輕鬆實現該功能。


import cv2

img = cv2.imread('test.jpg')
B,G,R=cv2.split(img)
cv2.imshow("Red",R)
cv2waitKey(0)
cv2.imshow("Green",G)
cv2WaitKey(0)
cv2.imshow("Blue",B)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.split()函數的參數是待調整的圖像,函數的返回值是一組分離後的圖像通道。

七、圖像ROI

在進行圖像處理時,有時候需要對感興趣的區域進行特殊處理,使用ROI(Region of Interest)技術可以將該部分區域分割,以便完成後續操作。


import cv2

img = cv2.imread('test.jpg')
roi = img[100:200,100:200]
cv2.imshow("ROI", roi)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代碼中,img變量是待處理圖像,通過img[x1:x2,y1:y2]的方式選取原圖像中的ROI區域,並使用cv2.imshow()函數將ROI區域顯示出來。

八、使用cv2.imshow()函數進行視頻播放

除了用於單張圖片的顯示,cv2.imshow()函數還經常用於視頻播放。使用OpenCV自帶的cv2.VideoCapture()函數能夠輕鬆讀取視頻,將視頻的每一幀轉化為灰度圖像,再使用cv2.imshow()函數進行顯示。


import cv2

cap = cv2.VideoCapture('test.mp4')

while (cap.isOpened()):
    ret,frame = cap.read()
    if ret == False:
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',gray)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

上述代碼中,cv2.VideoCapture()函數讀取的是一個test.mp4格式的視頻,每次調用cap.read()函數可以讀取視頻的一個幀,並使用cv2.cvtColor()函數將每一幀轉為灰度圖像,再使用cv2.imshow()函數進行顯示。通過cv2.waitKey()函數,我們可以設置每一幀之間的等待時間,當按下鍵盤上的’q’鍵之後,播放會停止。

總結

本篇文章闡述了OpenCV中的cv2.imshow()函數,並通過多種示例展示了其豐富的功能特性。這些示例代碼可以在實際項目中作為快速參考,提高我們的編碼效率。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/183685.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 05:48
下一篇 2024-11-25 05:48

相關推薦

  • 如何在PyCharm中安裝OpenCV?

    本文將從以下幾個方面詳細介紹如何在PyCharm中安裝OpenCV。 一、安裝Python 在安裝OpenCV之前,請確保已經安裝了Python。 如果您還沒有安裝Python,可…

    編程 2025-04-29
  • Python OpenCV 直線檢測

    本文將介紹在Python OpenCV中進行直線檢測的方法,主要涉及到圖像的邊緣檢測、霍夫變換和繪製直線等操作。 一、邊緣檢測 由於直線檢測是從圖像的邊緣開始的,因此必須先找到圖像…

    編程 2025-04-29
  • Opencv 實現讀取 BMP 圖片

    Opencv 是一個基於 C/C++ 語言的開源計算機視覺庫,可以用於圖像處理、特徵識別、目標跟蹤、機器學習等領域。在圖像處理中,讀取 BMP 圖片是常見操作之一。 一、打開 BM…

    編程 2025-04-27
  • opencv鼠標繪圖

    本文將為您詳細介紹如何使用opencv在原始圖片上進行鼠標繪圖。 一、準備工作 在開始繪製之前,您需要先準備好以下的工作: 1、安裝opencv庫,可以通過pip install …

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論