Python圖像處理:cv2.imshow()使用方法詳解

一、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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 10:28
下一篇 2024-12-01 10:28

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論