2016-06-22 85 views
1

我在iOS Xcode objc中使用OpenCV framework,有沒有一種方法可以處理來自攝像機的圖像訂閱源,並允許用戶觸摸屏幕上的對象,然後我們使用OpenCV中的一些功能可以突出顯示它。使用OpenCV觸摸並選擇對象

這裏是圖形我的意思。第一個圖像顯示什麼樣的用戶可能會在視頻饋送中所看到的一個例子:

enter image description here

然後,當他們輕觸我想使用的OpenCV特徵/對象檢測處理的區域中的ipad的在屏幕上它們已點擊以突出顯示該區域。會是這個樣子,如果他們點擊了iPad:

enter image description here

如何,這將是在objc OpenCV中實現的任何想法?

我可以很容易地看到我們如何使用經過訓練的iPad模板來匹配OpenCV算法,但我想嘗試使其動態變化,以便用戶可以觸摸屏幕中的任何內容,從那裏?

+0

對於您需要檢測圖像中的所有對象(在上面的圖像他們是iPad,鉛筆,圓珠筆等)。然後當用戶觸摸屏幕n,檢查所有檢測到的對象上用戶觸摸了哪個對象,然後只顯示它。 –

+0

正在使用由用戶製作的塗鴉,而不是一個單一的攻絲也是一個選項? – drorco

+0

我不排除任何ibezito。你在暗示什麼? – Matt

回答

0

你可以通過使用opencv Haar分類器訓練Ipad圖像的分類器,然後檢測給定幀中的Ipad圖像。

現在基於觸摸的座標檢查該區域是否與檢測到的Ipad圖像區域重疊。如果它從檢測到的Object.Means上執行Drawbounding框,則可以繼續處理檢測到的ipad圖像。

對要檢測的對象數重複上述過程。

+0

嗨Abhishek,謝謝你的回覆。這只是一個示例對象。我想在沒有任何對象檢測培訓的情況下做到這一點。選中的對象可以是任何東西。我希望事實上我已經掌握了對象的接觸點,可以找出所選對象的邊緣並動態地突出顯示它。 – Matt

+0

我不知道任何其他的方法可能是你可以在Caffe深度學習框架中搜索像imagenet這樣的訓練過的圖像模型,它可以在各種類上訓練。 – Abhishek

1

解釋:我們爲什麼要使用的分割方法

根據我的理解,你正在試圖解決的任務是對象的細分,無論對自己的身份

物體識別方法是一種方法。但它有兩大缺點:

  1. 它需要你訓練一個對象分類器,並收集一個數據集,其中包含你想要識別的對象的相當數量的例子。如果你選擇了一個已經訓練過的分類器 - 它肯定會對你想檢測的任何類型的對象有效。
  2. 大多數對象識別解決方案都會在識別的對象周圍找到邊界框,但它們不會對其進行完整分割。分割部分需要額外的努力。

因此,我相信你的情況最好的辦法是使用圖像分割算法。更精確地說,我們將使用GrabCut segmentation algorithm

的GrabCut算法

這是一個迭代算法有兩個階段:

  1. 初始階段 - 用戶指定對象周圍的邊界框。 給出這個邊界框,該算法通過使用GMM估計前景(對象)和背景的顏色分佈,然後進行圖切割優化以找到前景和背景之間的最佳邊界。

  2. 在下一階段,用戶可以通過提供前景和背景的塗鴉,在需要時更正分割。該算法相應地修復模型並基於更新的信息執行新的分割。

使用這種方法有利有弊。 優點:

  1. 分割算法很容易與openCV實現。
  2. 它使用戶能夠根據需要修復分割錯誤。
  3. 它不依賴於收集數據集和訓練分類器。

主要的缺點是,您需要額外的信息來源於用戶旁邊的屏幕上的一個水龍頭。這些信息將成爲物體周圍的邊界框,並且在某些情況下 - 需要額外的塗鴉來糾正分割。

代碼

幸運的是,這個算法的OpenCV的實現。用戶Itseez創建一個簡單的且易於使用的樣品,使用的OpenCV的GrabCut算法,該算法可以在這裏找到:https://github.com/Itseez/opencv/blob/master/samples/cpp/grabcut.cpp

應用用法:

的應用程序接收到的圖像文件的路徑作爲一個命令行參數輸入。它將圖像渲染到屏幕上,用戶需要提供初始邊界矩形。

用戶可以按'n'來執行當前迭代的分割或按'r'來恢復其操作。

選擇矩形後,計算分割。如果用戶想要更正它,他可以選擇通過按shift + left和Ctrl + left相應地添加前景或背景塗鴉。

例子

區隔的iPod:

enter image description here

細分筆:

enter image description here

+0

我想問題的作者沒有圍繞每個對象的指導。他需要從圖像中找到分割,而不是從圖像和對象矩形。 – taarraas

+0

@taarras,作者在評論中表示他不排除任何事情。生成矩形需要用戶在屏幕上兩次敲擊,最終結果會更準確。 – drorco

+0

嗨,ibezito。棒極了。一個問題,有沒有一種方法來使用沒有邊界矩形的抓取方法?即如果您要在iPad等對象上捕捉觸摸事件,則抓取會找到您觸摸的對象的邊緣。 – Matt