在計算機視覺領域中,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-tw/n/183685.html