如何使用Opencv對影象進行顏色特徵提取?

這是一張24色卡,有24種顏色在裡面,該色卡通常用於測試攝像頭camera色偏,如手機,平板電腦攝像頭。實際測試可能位置會有偏移,這對於計算機視覺識別帶來不便,一種方式克服的方法就是根據顏色特徵計算位置座標,進而進行影象分析。本文基於OpenCV計算機視覺庫,開發簡單程式用於識別圖片顏色特徵。本文先以提取紅色方塊進行示範。

如何使用Opencv對影象進行顏色特徵提取

方法/步驟

開啟小畫家,將色卡開啟,點選吸管工具,移動滑鼠到紅色塊上方,鬆開滑鼠,此時,吸管工具已經提取了紅色色塊資訊。然後點選右方的“編輯顏色”,彈出顏色選擇對話方塊,此時,右下角有剛才習慣的紅綠藍顏色資訊,如紅152,綠18,藍15。這個就是顏色對應的RGB色彩值。

如何使用Opencv對影象進行顏色特徵提取

如何使用Opencv對影象進行顏色特徵提取

建立VC控制檯工程,加入所需標頭檔案和庫檔案。注意要事先將opencv 標頭檔案和庫檔案新增到工程屬性中,作者使用opencv2.4+VC2010示範。

#include

#include

#include

#include

#include

#include

#pragma comment (lib,"opencv_core244d.lib")

#pragma comment (lib,"opencv_highgui244d.lib")

#pragma comment (lib,"opencv_imgproc244d.lib")

如何使用Opencv對影象進行顏色特徵提取

定義一個顏色常量target,預設值即為剛才吸管工具提取的紅色色塊的RGB值分量,和一個計算與顏色標準值色差的函式,暫定為色差在10以內即為相近顏色。這裡cv::Vec3b 變數對應一個數組值, Vec3b[0] 對應blue,Vec3b[1]對應green,Vec3b[2]對應Red,即BGR。

如何使用Opencv對影象進行顏色特徵提取

接著新增以下程式碼,目的為讀取源圖片,根據圖片大小做一定的縮放,然後定義同樣大小的一個灰度圖,用於存貯計算結果值。核心演算法如下,遍歷源圖片,色差(與紅色色塊比較)低於30的即為需要提取的顏色值,將此畫素位置記錄並寫入到灰度圖中,以黑色顯示,否則設定為白色。然後將處理前後圖片顯示出來。

如何使用Opencv對影象進行顏色特徵提取

如何使用Opencv對影象進行顏色特徵提取

實際商業應用中也是可以如法炮製的,比如下圖的藥片,大小,顏色不統一,如何提取識別黃色小藥片在何處或計算其數量呢。

筆者嘗試使用吸管工具提取其BGR值為(22,184,245),將色差由10調整為30,可以正確檢測此藥片。如圖。

如何使用Opencv對影象進行顏色特徵提取

提取後的二值化圖片如果再處理一次,比如做輪廓檢測,或計算面積或辨別三角形或四邊形或多邊形,可以確定具體位置,或者能夠做更細緻的 篩選,本文只是拋磚引玉,如幫到了你,請投寶貴一票,謝謝。

相關問題答案