文章目錄
- OpenCV 圖像基礎認知與運用
- 1. OpenCV 簡介與安裝
- OpenCV 的優勢
- 安裝 OpenCV
- 2. 圖像的基本概念
- 2.1. 圖像的存儲格式
- 2.2. 圖像的表示
- 3. 圖像的基本操作
- 3.1. 創建圖像窗口
- 3.2. 讀取與顯示圖像
- 3.3. 保存圖像
- 3.4. 圖像切片與區域提取
- 3.5. 圖像大小調整
- 4. 圖像繪制與注釋
- 4.1. 繪制直線、圓形和矩形
- 4.2. 繪制文本
- 5. 視頻處理基礎
- 6. 總結
OpenCV 圖像基礎認知與運用
在現代計算機視覺領域,OpenCV 是最常用的開源計算機視覺庫之一。它為開發者提供了強大的圖像處理、計算機視覺和機器學習工具。本文將詳細介紹 OpenCV 中圖像的基礎認知和常見運用方法,包括圖像的表示、讀取、顯示、處理等內容,并拓展相關的知識。
1. OpenCV 簡介與安裝
OpenCV 是一個開源的計算機視覺庫,提供了眾多的圖像處理和計算機視覺工具。它不僅支持多種編程語言,如 C++、Python 和 Java,還能在多個平臺上使用,包括 Windows、Linux 和 macOS。
OpenCV 的優勢
- 開源免費:OpenCV 是一個開源的計算機視覺庫,任何人都可以自由使用、修改和分發。
- 多語言支持:OpenCV 支持多種編程語言,如 Python、C++、Java 等,提供了跨平臺支持。
- 豐富的 API:OpenCV 提供了大量函數接口,涵蓋了圖像處理、機器學習、特征檢測、對象識別等多個領域。
安裝 OpenCV
你可以通過以下幾種方式安裝 OpenCV:
-
通過 conda 安裝:
conda install -c conda-forge opencv
-
通過 pip 安裝:
pip install opencv-python
-
通過 pip鏡像源 安裝(這里提供的是清華的PyPI 鏡像源):
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
2. 圖像的基本概念
2.1. 圖像的存儲格式
圖像是由 像素 組成的,每個像素存儲了圖像的顏色、亮度等信息。通常情況下,圖像以矩陣的形式存儲在計算機中。圖像可以是 灰度圖像 或 彩色圖像,而 OpenCV 中常用的是 8 位圖像。
- 灰度圖像:二維矩陣,每個元素代表一個灰度值,通常范圍是 0-255。
- 彩色圖像:三維矩陣,每個像素由三個顏色通道(R、G、B)構成,每個通道的像素值范圍是 0-255。
2.2. 圖像的表示
OpenCV 中,圖像數據以 numpy 數組的形式表示。對于彩色圖像,圖像數據是一個三維數組 (height, width, channels)
,其中:
- height:圖像的高度(行數)
- width:圖像的寬度(列數)
- channels:圖像的顏色通道數,彩色圖像有 3 個通道(RGB),灰度圖像只有 1 個通道。
3. 圖像的基本操作
3.1. 創建圖像窗口
在 OpenCV 中,圖像窗口用于顯示圖像。你可以使用 cv2.namedWindow()
函數來創建一個窗口:
cv2.namedWindow("Window Name", cv2.WINDOW_NORMAL)
cv2.WINDOW_NORMAL
允許你調整窗口的大小。
3.2. 讀取與顯示圖像
你可以通過 cv2.imread()
讀取圖像,并使用 cv2.imshow()
顯示圖像:
import cv2# 讀取圖像
img = cv2.imread('image.jpg')# 顯示圖像
cv2.imshow('Image Window', img)# 等待按鍵輸入,按任意鍵關閉圖像窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(0)
:等待用戶按鍵。cv2.destroyAllWindows()
:關閉所有顯示的窗口。
3.3. 保存圖像
保存圖像到本地文件:
cv2.imwrite('output_image.jpg', img)
3.4. 圖像切片與區域提取
圖像切片用于從圖像中提取指定的區域。你可以使用切片操作來提取矩形區域:
roi = img[100:200, 150:250] # 從 (100, 150) 到 (200, 250) 的矩形區域
cv2.imshow('ROI', roi)
確保切片操作的邊界在圖像尺寸范圍內。
3.5. 圖像大小調整
使用 cv2.resize()
函數可以調整圖像的尺寸:
resized_img = cv2.resize(img, (width, height))
width
和height
是目標圖像的寬度和高度。
4. 圖像繪制與注釋
4.1. 繪制直線、圓形和矩形
OpenCV 提供了函數來繪制基本圖形,如直線、圓形和矩形。
-
繪制直線:
cv2.line(img, (start_x, start_y), (end_x, end_y), (255, 0, 0), 2)
-
繪制圓形:
cv2.circle(img, (center_x, center_y), radius, (0, 255, 0), 2)
-
繪制矩形:
cv2.rectangle(img, (top_left_x, top_left_y), (bottom_right_x, bottom_right_y), (0, 0, 255), 2)
4.2. 繪制文本
OpenCV 允許你在圖像上繪制文本:
cv2.putText(img, 'Hello, OpenCV!', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
(50, 50)
:文本起始位置。cv2.FONT_HERSHEY_SIMPLEX
:字體類型。1
:字體大小。(0, 255, 0)
:文本顏色(綠色)。2
:文本粗細。
5. 視頻處理基礎
OpenCV 還支持視頻讀取與處理。你可以使用 cv2.VideoCapture()
讀取視頻文件或攝像頭數據,并使用 cap.read()
獲取每一幀圖像:
cap = cv2.VideoCapture(0) # 讀取攝像頭視頻while True:ret, frame = cap.read() # 讀取每一幀if not ret:breakcv2.imshow('Video', frame)if cv2.waitKey(1) & 0xFF == ord('q'): # 按 'q' 鍵退出breakcap.release()
cv2.destroyAllWindows()
cap.read()
:返回當前幀的圖像。cv2.waitKey(1)
:每 1 毫秒檢查一次鍵盤輸入。
6. 總結
本文介紹了 OpenCV 的圖像基礎知識,并展示了如何使用 OpenCV 進行圖像處理和繪制操作。你學習了以下內容:
- 圖像的基本概念:如何表示圖像、如何使用 OpenCV 進行圖像處理。
- 圖像操作:圖像的讀取、顯示、保存、大小調整、切片等基本操作。
- 繪圖與注釋:如何在圖像上繪制直線、圓形、矩形以及文本。
- 視頻處理:如何讀取和顯示視頻。
掌握 OpenCV 的這些基礎知識,能夠幫助你進行圖像處理、計算機視覺等任務的實現,并為后續深入學習更復雜的技術打下堅實基礎。