OpenCV 基於顏色的物體檢測系統

2022-09-03 20:00:19 字數 1559 閱讀 8968

這次區別於證件照,我試著編寫了一下在複雜背景下分離純色物體的系統,因為只是簡單的程式設計,所以結果有待優化,先分析一下實驗環境:

這次的背景雜亂,雖然主體是粉色主導,但是因為光照不統一,色域跨度較大,倒影中也有粉色痕跡,杯壁上有花紋,這種情況下邊緣檢測誤差很大。

為了讓計算機更好的識別主體顏色,要先將rgb色域轉換為hsv色域,在hsv色域中,紅色的h值在(0,3)u(156,180)中。粉色的s值飽和度不高,但是比白色要高很多,區間在(50,150)以內。

v代表value,只有黑色或偏黑的顏色v值會偏低,這裡我們只要設定乙個稍高的閾值就可以了。

第一步是大體分離出主體部分,滿足條件的顏色區域會被標記為白色(255)其餘為黑色(0):

左邊這張圖是hue單通道的檢測,因為在opencv中,hue通道的取值範圍是0-180,紅色在180左右的位置,所以發白,而杯體其他部分的紅色較深,集中在0-5內,所以顯示為黑色。

將兩個區域相並,並加上對value與saturation的限制,右圖既是hsvmask的結果。

void tohsv(cv::mat image, cv::mat result)  //

產出是乙個mask

else}}

}

這個方法中,引數第乙個為3通道rgb影象,第二個引數為單通道的灰度二值影象。

因為這個mask還有一些瑕疵,為了去除這部分瑕疵我們需要使用形態學濾波器:

void homography(cv::mat image, cv::mat opened) //

mask

形態學濾波只針對二值影象,因此輸入輸出都是二值影象,structure element為9x9,意味著長寬不足9的畫素塊會被抹去,結果如下:

將mask運用到原影象上:

void

copymask(cv::mat image, cv::mat openmask, cv::mat result)}}

}

結果如下:

可以看到損失了一部分,損失的這部分就是原圖中的高光區域,這些區域的顏色因為光的照射變為白色,不好從顏色上區分,也是這種方法的乙個盲點。

void

edgedetection(cv::mat image, cv::mat edge)

結果如下:

可以看到被子的倒影對於邊緣檢測產生了很大的影響,若杯體本身跟後邊背景的顏色差異不大的話,也很難被檢測到。

基於特徵點的物體檢測

本教程是一種用於基於在參考影象和目標影象之間找到點對應關係來檢測特定物件的演算法。儘管尺度變化或平面內旋轉,它仍可以檢測物體。它對於少量的平面外旋轉和遮擋也很穩健。這種物件檢測方法最適用於呈現非重複紋理圖案的物件,這會產生獨特的特徵匹配。對於均勻著色的物件或包含重複圖案的物件,此技術不太適用。請注意...

opencv運動物體檢測

參考資料 python opencv實現動態物體追蹤 python opencv實踐 一 基於顏色的物體追蹤 上 在hsv顏色空間識別區域顏色 opencv python tutorials opencv形態學處理 opencvl輪廓檢測函式 樹莓派智慧型小車結合攝像頭,opencv進行物體追蹤 給...

基於顏色的多目標物體檢測與跟蹤系統

1.系統簡介 使用普通usb相機,對 camera 視野範圍內特定顏色的物體進行檢測與跟蹤。首先,將相機獲取的影象從 rgb空間轉換到 hsv空間。然後,通過調整 hsv空間各通道的閾值,生成二值化影象,並找出影象中存在的物體輪廓,從而檢測出符合指定顏色特徵的目標物體並進行跟蹤。通過濾除面積過小和過...