一、cv2.imshow()是什麼?
1、cv2.imshow()是OpenCV中一種非常重要的圖像顯示函數,可以呈現圖像在窗口中的實時變化。cv2.imshow()函數需要兩個參數,一個是窗口名,另一個是待展示的圖像。
2、接下來,我們先導入需要使用的庫cv2和numpy,並讀取一張待處理的圖像:
import cv2
import numpy as np
img = cv2.imread('test.jpg')
3、再通過cv2.imshow()函數來打開圖像:
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
4、注意,cv2.imshow()函數中第一個參數表示窗口名稱,第二個參數表示圖像。cv2.waitKey()參數表示等待時間。如果為0,會無限等待用戶的鍵盤響應。而cv2.destroyAllWindows()則是摧毀所有cv2.imshow()展示的窗口。
二、圖像大小調整
1、通過cv2.imshow()函數,我們可以改變圖像大小。首先,我們先使用cv2.resize()函數根據需要調整圖像大小並展示:
resized = cv2.resize(img, (int(img.shape[1] / 2), int(img.shape[0] / 2)))
cv2.imshow('Resized Image', resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、在cv2.resize()函數中,我們需要分別指定目標大小並傳入圖像數組。其中img.shape返回的是一個元組,第一個位置為高度,第二個位置為圖像寬度。上述代碼將img調整大小為一半,並將新大小的圖像展示出來。
三、圖像裁剪
1、接下來我們將圖像進行剪裁。我們可以使用numpy的切片操作對圖像進行裁剪,也可以使用crop()函數來實現圖像裁剪操作。我們來看一下下面的實現方法:
cropped = img[300:900, 600:1200]
cv2.imshow('Cropped Image', cropped)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、在上述代碼中,我們使用了裁剪用到的numpy的切片操作。我們將img的300~900行和600~1200列提取出來,稱其為cropped大小的圖像。最終展示結果如下所示:
四、圖像旋轉
1、圖像旋轉是圖像處理中經常用到的一種操作。我們可以通過cv2.getRotationMatrix2D()函數來旋轉圖像。
(h, w) = img.shape[:2]
center = (w / 2, h / 2)
M = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated = cv2.warpAffine(img, M, (w, h))
cv2.imshow('Rotated Image', rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、在上述代碼中,我們指定旋轉中心為圖像中心,旋轉角度為45度,縮放比例為1.0。然後,我們使用cv2.warpAffine()函數來進行圖像旋轉操作。
五、圖像翻轉
1、圖像翻轉功能通過函數cv2.flip()實現。這個簡單函數中,我們指定翻轉方向是垂直或水平的。
flip_vertical = cv2.flip(img, 0)
flip_horizontal = cv2.flip(img, 1)
cv2.imshow('Vertical Flip', flip_vertical)
cv2.imshow('Horizontal Flip', flip_horizontal)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、在上述代碼中,我們指定0表示指定垂直反轉,1表示水平反轉。最終的輸出結果如下所示:
六、圖像灰度化處理
1、將彩色圖像轉化為灰度圖像的方法是從RGB三個通道中取平均值來實現。可以使用函數cv2.cvtColor()實現該操作。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、在上述代碼中,我們使用cv2.cvtColor()函數將彩色圖像轉換為灰度圖像。在這裡,BGR顏色模式在OpenCV中使用。
七、圖像二值化處理
1、圖像二值化是一種常見的圖像處理策略,用於將圖像轉換為二進制格式。可以通過閾值調整來實現自動化二值化。在這裡,我們使用了兩種常見的方法實現該操作:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
threshold_value = 128
(thresh, binary_threshold) = cv2.threshold(gray, threshold_value, 255, cv2.THRESH_BINARY)
(adapt_thresh_mean, adapt_mean) = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow('Adaptive Thresholding', adapt_thresh_mean)
cv2.imshow('Binary Thresholding', binary_threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、在上述代碼中,我們使用函數cv2.threshold()進行二值化的基礎操作。其中的第一個參數是原圖像,第二個參數是要設定的閾值,第三個參數是用於將超過閾值的像素設定為的新值,第四個參數則是用於指定使用的閾值類型。
3、在本例中,我們用的是cv2.THRESH_BINARY類型的閾值分割,這是最常見的圖像處理和計算機視覺分割算法。
八、圖像平滑濾波處理
1、平滑處理是一種常見的圖像處理操作,用於去除噪聲並平緩圖像中的輪廓和細節,使得後續的圖像處理步驟更容易。可以使用函數cv2.GaussianBlur()和cv2.medianBlur()來實現圖像平滑處理操作。
blurred_gaussian = cv2.GaussianBlur(img, (5, 5), 0)
blurred_median = cv2.medianBlur(img, 5)
cv2.imshow('Gaussian Blur', blurred_gaussian)
cv2.imshow('Median Blur', blurred_median)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、在上述代碼中,我們使用了cv2.GaussianBlur()函數和cv2.medianBlur()函數分別對圖像進行濾波處理。其中,cv2.GaussianBlur()函數可以根據所傳遞的標準差參數(第三個參數)調整濾波效果,而cv2.medianBlur()函數可以根據所傳遞的核大小來調整濾波效果。
九、總結
本次用Python演示了cv2.imshow()函數(OpenCV)對於圖像進行各種處理的方法,包括調整圖像大小、裁剪圖像、旋轉圖像、翻轉圖像、灰度化處理、二值化處理和平滑濾波處理。這些技術可以被廣泛應用於圖像處理、計算機視覺和機器視覺領域。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/192625.html