1. 程式人生 > >OpenCV 學習筆記 02 使用opencv處理影象 OpenCV 學習筆記 02 處理檔案、攝像頭和圖形使用者介面

OpenCV 學習筆記 02 使用opencv處理影象 OpenCV 學習筆記 02 處理檔案、攝像頭和圖形使用者介面

1 不同色彩空間的轉換

opencv 中有數百種關於不同色彩空間的轉換方法,但常用的有三種色彩空間:灰度、BRG、HSV(Hue-Saturation-Value)

  • 灰度 - 灰度色彩空間是通過去除彩色資訊來將其轉換成灰階,灰度色彩空間對中間處理特別有效,比如人臉檢測
  • BGR - 藍-綠-紅 彩色空間,每個畫素點都由一個三元陣列來表示,分別代表藍-綠-紅三種顏色。
  • HSV,Hue 表示色調,Saturation 表示飽和度,Value 表示黑暗的程度。

2 傅立葉變換

傅立葉變換的概念是許多常見的影象處理操作的基礎,比如邊緣檢測或線段和形狀檢測。

2.1 高通濾波器

高通濾波器(HPF)是檢測影象的某個區域,然後根據畫素與周圍畫素的亮度差值來提升(boost)該畫素的亮度的濾波器。

高通濾波器在邊緣檢測非常有效,它會採用一種稱為高頻提升濾波器(high boost filter)的高通濾波器。

首先給出一個例子

import cv2
import numpy as np
from scipy import ndimage

kernel_3 = np.array([
    [-1, -1, -1],
    [-1, 8, -1],
    [-1, -1, -1]
    ])

kernel_5 = np.array([
    [
-1, -1, -1, -1, -1], [-1, 1, 2, 1, -1], [-1, 2, 4, 2, -1], [-1, 1, 2, 1, -1], [-1, -1, -1, -1, -1] ]) img = cv2.imread('small.jpg', 0) print(help(cv2.imread)) k3 = ndimage.convolve(img, kernel_3) k5 = ndimage.convolve(img, kernel_5) blurred = cv2.GaussianBlur(img, (11, 11), 0) g_hpf
= img - blurred cv2.imshow('3*3', k3) cv2.imshow('5*5', k5) cv2.imshow('g_hpf', g_hpf) cv2.waitKey() cv2.destroyAllWindows()

執行可以得到如下圖:

程式碼分析:

1)匯入模組後,定義了核。

核,是指一組權重的積核,將它應用在源影象的一個區域,並由此生成目標影象的一個畫素。

2)在cv2.imread()中的引數 0 。主要是將其轉換為單通道灰度影象。詳見 OpenCV 學習筆記 02 處理檔案、攝像頭和圖形使用者介面

cv2.IMREAD_GRAYSCALE = 0    如果設定,則始終將影象轉換為單通道灰度影象。

3)對於給定核與影象的“ 卷積 convole ” 而言,numpy 在多維陣列卷積運算時較為複雜(一維陣列完成可以勝任),scipy 的 convolve() 函式可解決完美地解決該問題。

4)最後一種高通濾波器的實現方法有兩步;第一步對影象應用低通濾波器,第二步再對與原始影象計算差值。

5)不難發現,第三種效果最好。

2.2 低通濾波器

高通濾波器是根據畫素與臨近畫素的亮度差值來提升該畫素的亮度;

低通濾波器(Low Pass Filter, LPF)的實現原理是在畫素與周圍畫素的亮度差值小於一個特定值時,平滑該畫素的亮度。該法主要應用於去噪和模糊化;其中,高斯模糊是最常用的模糊濾波器(平滑濾波器)之一,它是一個削弱高頻訊號強度的低通濾波器。