用OpenCV處理圖圖片,只顯示圖片中的黃色乒乓球,其他區域為黑色?

如圖,提取圖中乒乓球區域


如果是做實時的應用,提供另外一個方法:拿像素正負樣本使用C4.5或者C5.0 訓練一下,得到一個簡單的像素分類器。

---

Information on See5/C5.0


openCv不會,我用另一個軟體給你弄一弄。

read_image (Image, "C:/Users/happy/Desktop/PingPang.png")

decompose3 (Image, ImageR, ImageG, ImageB)

threshold (ImageR, Region, 169, 255)

closing_circle (Region, RegionClosing, 3.5)

fill_up (RegionClosing, RegionFillUp)

connection (RegionFillUp, ConnectedRegions)

select_shape (ConnectedRegions, SelectedRegions, "area", "and", 11526.2, 24852.2)

reduce_domain (Image, SelectedRegions, ImageReduced)

讀圖——分解為三個通道灰度圖——對紅通道進行閾值分割——閉運算——填充孔洞——連接相連的選區——選擇面積在一定範圍內的選區——減少圖像部分只留下乒乓球。


先根據顏色進行分割,把黃色物體提取出來,在根據面積、似圓度等指標,最終確定乒乓球


最近寫了一個在線解決這個問題的東西Image Online

  • 得到某個顏色區域
  • 去噪
  • 圖片變大變小
  • 獲得感知哈希字元串
  • 得到輪廓

實現了一些基本功能,伺服器很渣,但是基本可以一用。。。。。感覺按步驟組合起來用可以實現得到圖像特徵

======這樣的分隔線可以嗎======

基本思路感覺是這樣的。你先把將圖像從RGB模型轉換到 HSV 空間,設置 HSV 閾值到藍色範圍。獲取黃色物體,繼續做你想做的事情。

RGB模型

原點到白色頂點的中軸線是灰度線,r、g、b三分量相等,強度可以由三分量的向量表示。

用RGB來理解色彩、深淺、明暗變化:

色彩變化: 三個坐標軸RGB最大分量頂點與黃紫青YMC色頂點的連線

深淺變化:RGB頂點和CMY頂點到原點和白色頂點的中軸線的距離

明暗變化:中軸線的點的位置,到原點,就偏暗,到白色頂點就偏亮

HSV模型

這個模型就是按色彩、深淺、明暗來描述的。

H是色彩

S是深淺, S = 0時,只有灰度

V是明暗,表示色彩的明亮程度,但與光強無直接聯繫,(意思是有一點點聯繫吧)。

用python寫opencv的例子

import cv2
wirtename=「你想保存的圖片的名字」
openname="你的圖片的名字"
low=20
high=30
img=cv2.imread(openname)
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_yellow=np.array([low,50,50])
upper_yellow=np.array([high,255,255])
mask=cv2.inRange(hsv,lower_yellow,upper_yellow)
cv2.imwrite(wirtename,mask)

處理後的結果

原圖

low=20,low=30

low=10,low=30

如果你想識別的更清晰可以進一步進行去噪

如果你想分出更多的顏色你只需要改變low和high

還可以用圖像匹配進行識別


三通道分離,紅綠通道霍夫圓檢測,都有的為乒乓球區域


前面說的都無法非常準確的提取出乒乓球,誰說相機裡面的乒乓球全是黃色的?誰說相機裡面的乒乓球是一個理想圓?

如果要非常精確,cv::GrabCut非常適合,請自行查閱。


個人感覺grabcut實用性比HSV顏色分割和霍夫圓要好. 因為HSV是基於顏色分割的,inRange的閾值常常會因場景光照的影響變化很大,霍夫圓基於形狀,如果有遮擋不夠"圓"就需要更多一些處理.

簡單試了下grabcut的效果還是可以的,如下圖:


只根據顏色也行吧,縮小檢測範圍,然後精檢測,邊緣不知道是不是就夠了


題主要寫畢業設計?


霍夫圓檢測都可以不用,直接二值化,提取二值化區域中長寬比在1比1附近的最大連通域,記下然後和原圖比較留下黃色乒乓球區域


霍夫圓,懂?


推薦閱讀:

我目前是研一的計算機視覺學生,我的課題是醫學圖像的分割,但我在matlab opencv itk徘徊?
NUFFT的計算難點在哪裡?
為什麼用圖像二維傅里葉變換的相位譜進行反變換,能夠大致得到原圖的形狀,而幅度譜則不行呢?
如何系統的學習PS?

TAG:圖像處理 | OpenCV |