[OpenCV基礎][Python]OpenCV影像的基礎介紹

更新於 2024/01/28閱讀時間約 4 分鐘

OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺影像處理庫,它提供了豐富的功能和工具,可用於開發各種視覺應用程式

OpenCV最初是用C++編寫的,但它也提供了Python、Java等多種程式語言的接口,方便不同語言的開發者使用。


OpenCV影像基礎介紹

  1. 影像的表示:
    • OpenCV中的影像是以NumPy陣列的形式表示的,可以是二維(灰度影像)或三維(彩色影像)。對於彩色影像,通常使用BGR通道,即藍色(Blue)、綠色(Green)、紅色(Red)。
  2. 色彩通道:
    • 彩色影像中,每個像素都有三個色彩通道,分別對應著三個顏色。
    • OpenCV使用BGR順序,這表示像素的數據順序為藍色值綠色值紅色值
  3. 影像坐標系:
    • 影像是以NumPy的多維陣列(ndarray)形式表示的。
    • 陣列的維度是 (rows, columns),其中 rows 表示影像的高度columns 表示影像的寬度
    • 透過座標 (y, x) (row, column) 來訪問它的值,通常我們習慣使用 (x, y) 表示座標
raw-image

程式範例

使用OpenCV和NumPy創建一個大小為160x280灰度影像,然後顯示圖像。

import cv2
import numpy as np

height = 160 # 影像高
width = 280 # 影像寬
# 建立GRAY影像陣列
image = np.zeros((height, width), np.uint8)
cv2.imshow("image", image) # 顯示影像

cv2.waitKey(0)
cv2.destroyAllWindows()
  1. import cv2:這是引入OpenCV庫的語句。
  2. import numpy as np:這是引入NumPy庫的語句,通常使用 np 作為別名。
  3. height = 160width = 280:這兩行代碼定義了影像的高度和寬度。
  4. image = np.zeros((height, width), np.uint8):這一行創建了一個高度為160,寬度為280的灰度影像。np.zeros 函數創建一個全為零的NumPy陣列,並指定了影像的型別為 np.uint8(8位元的無符號整數,範圍為0到255)。
  5. cv2.imshow("image", image):這一行使用OpenCV的 cv2.imshow 函數顯示影像。第一個參數是視窗的名稱,第二個參數是要顯示的影像。
  6. cv2.waitKey(0):這一行等待用戶按下任意按鍵。0 表示無限等待,直到按下按鍵為止。
  7. cv2.destroyAllWindows():這一行用於關閉所有打開的視窗。
程式輸出圖

程式輸出圖

在影像的坐標系中跟常見的笛卡兒坐標系不同,(0, 0)是從左上角開始,沒有負值。


我們印出圖像的資訊看看長什麼樣子吧。

image.shape : 查看圖像形狀。

形狀為160x280灰度影像,這個陣列的所有元素都是 0,這表示整個影像是全黑的。

在灰階影像中,數值0為黑色,數值255為白色。

print(f'image size {image.shape}')
print(image)


圖像資訊

圖像資訊

使用 NumPy 的 np.linspace 函數來創建一個漸變從黑到白的灰度影像。

使用 np.linspace(0, 255, width, dtype=np.uint8) 來創建一個灰度值的漸變,然後使用 np.tile 將這個漸變複製到整個影像的高度。

# 創建灰度漸變影像
gradient_image = np.linspace(0, 255, width, dtype=np.uint8)
gradient_image = np.tile(gradient_image, (height, 1))

最後呈現由黑到白的灰度影像,來理解圖像資訊的數值 0~255的概念。

從黑到白的灰度影像

從黑到白的灰度影像


先有OpenCV影像的基礎,才會對後續的應用有更深的理解









avatar-img
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
本文介紹如何使用OpenCV的分水嶺演算法來實作硬幣的影像分割。除了官方範例外,還加入取出分割後物件的中心點來標註的功能。透過二值化、距離圖、前景圖、分割背景圖等步驟,最後應用分水嶺演算法進行硬幣的分割。本文也提供程式範例及圖示逐步解析演算法。
本文介紹OpenCV中的SimpleBlobDetector用於檢測斑點或圓,以及其與霍夫轉換找圓方法的差異。透過程式範例和解析,講解檢測到的關鍵點和設定參數,並整理SimpleBlobDetector與霍夫轉換的不同。最後,探討不同的應用場景和參數調整。
大部分在求物件的寬度及高度,都會想到用OpenCV的findContours函式來做,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度 [OpenCV應用][Python]利用findContours找出物件邊界框求出寬度及高度 本文將用不同的方法,利用Numpy
本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。 一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色,背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。 結果圖 從圖中綠色框
利用OPENCV,實現SIFT應用,尋找圖片中物件的旋轉角度 本文介紹主要提出SIFT提取關鍵角點的座標,由此算出物件的旋轉角度 程式功能介紹 : 導入待檢測圖及樣本圖,則會依照樣本圖中的物件為基準
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
本文介紹如何使用OpenCV的分水嶺演算法來實作硬幣的影像分割。除了官方範例外,還加入取出分割後物件的中心點來標註的功能。透過二值化、距離圖、前景圖、分割背景圖等步驟,最後應用分水嶺演算法進行硬幣的分割。本文也提供程式範例及圖示逐步解析演算法。
本文介紹OpenCV中的SimpleBlobDetector用於檢測斑點或圓,以及其與霍夫轉換找圓方法的差異。透過程式範例和解析,講解檢測到的關鍵點和設定參數,並整理SimpleBlobDetector與霍夫轉換的不同。最後,探討不同的應用場景和參數調整。
大部分在求物件的寬度及高度,都會想到用OpenCV的findContours函式來做,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度 [OpenCV應用][Python]利用findContours找出物件邊界框求出寬度及高度 本文將用不同的方法,利用Numpy
本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。 一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色,背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。 結果圖 從圖中綠色框
利用OPENCV,實現SIFT應用,尋找圖片中物件的旋轉角度 本文介紹主要提出SIFT提取關鍵角點的座標,由此算出物件的旋轉角度 程式功能介紹 : 導入待檢測圖及樣本圖,則會依照樣本圖中的物件為基準
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
在樹莓派安裝OpenCV的紀錄。板子是樹莓派3B(沒有+),系統raspbian bullseye 32bit灌到USB隨身碟。
Thumbnail
#安裝 OpenCV 相關套件 pip install opencv-python pip install opencv-contrib-python pip install matplotlib
Haar Cascade classifier OpenCV 官方 Github:https://github.com/opencv/opencv/tree/4.x/data 人臉特徵模型:haarcascade_frontalface_default.xml 資料來源: https://steam
Thumbnail
OpenCV 讀取圖片 原碼:https://reurl.cc/3354ZL 成果: OpenCV 本身有提供讀取圖檔的函數可用,讀取圖檔,只要呼叫 cv2.imread 即可將圖片讀取進來,以 cv2.imread 讀進來的資料,會儲存成一個 NumPy 的陣列。 將圖片讀取進來之後,可使用 c
opencv is use BGR color matplotlib is use RGB color 顯示圖片 opencv matplotlib
Thumbnail
初稿 作者: Stan Ht. Wu (stanwu 吳信典) 想像一下,如果整台電腦裝瀏覽器就好了?這樣多輕鬆啊!人生就是要斷捨離,什麼都不裝,就用瀏覽器就好了,您看連寫方格子的文章也是直接用瀏覽器耶!! 用瀏覽器基本上是最符合懶人原則,為什麼呢?因為從頭到尾根本不需要切換應用程式,存檔案放在雲端
Thumbnail
OpenCart 官方的 3.0.3.7 版於上周釋出,除了修正許多 3.0.x 版累積的小問題,也更新了 twig 套件解決了 PHP 7.4 的相容問題,所以 OpenCart 台灣電商技術團隊,也以 OpenCart 3.0.3.7 版為基礎,加上了在地優化及實用模組,推出台灣優化版。
Thumbnail
綠界科技雖然為 OpenCart 電商系統推出了可直接安裝使用的金流擴充模組,但其設計的模組架構,並不算完全符合 OpenCart 金流模組的架構規則,包含後臺編輯不同付款方式時的設定,無法獨立分開設定,前台的金流選擇,更是被設計成兩段式的模式,非常不符合台灣消費者慣用的習性。
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
在樹莓派安裝OpenCV的紀錄。板子是樹莓派3B(沒有+),系統raspbian bullseye 32bit灌到USB隨身碟。
Thumbnail
#安裝 OpenCV 相關套件 pip install opencv-python pip install opencv-contrib-python pip install matplotlib
Haar Cascade classifier OpenCV 官方 Github:https://github.com/opencv/opencv/tree/4.x/data 人臉特徵模型:haarcascade_frontalface_default.xml 資料來源: https://steam
Thumbnail
OpenCV 讀取圖片 原碼:https://reurl.cc/3354ZL 成果: OpenCV 本身有提供讀取圖檔的函數可用,讀取圖檔,只要呼叫 cv2.imread 即可將圖片讀取進來,以 cv2.imread 讀進來的資料,會儲存成一個 NumPy 的陣列。 將圖片讀取進來之後,可使用 c
opencv is use BGR color matplotlib is use RGB color 顯示圖片 opencv matplotlib
Thumbnail
初稿 作者: Stan Ht. Wu (stanwu 吳信典) 想像一下,如果整台電腦裝瀏覽器就好了?這樣多輕鬆啊!人生就是要斷捨離,什麼都不裝,就用瀏覽器就好了,您看連寫方格子的文章也是直接用瀏覽器耶!! 用瀏覽器基本上是最符合懶人原則,為什麼呢?因為從頭到尾根本不需要切換應用程式,存檔案放在雲端
Thumbnail
OpenCart 官方的 3.0.3.7 版於上周釋出,除了修正許多 3.0.x 版累積的小問題,也更新了 twig 套件解決了 PHP 7.4 的相容問題,所以 OpenCart 台灣電商技術團隊,也以 OpenCart 3.0.3.7 版為基礎,加上了在地優化及實用模組,推出台灣優化版。
Thumbnail
綠界科技雖然為 OpenCart 電商系統推出了可直接安裝使用的金流擴充模組,但其設計的模組架構,並不算完全符合 OpenCart 金流模組的架構規則,包含後臺編輯不同付款方式時的設定,無法獨立分開設定,前台的金流選擇,更是被設計成兩段式的模式,非常不符合台灣消費者慣用的習性。