c++ what 圖像處理:“可口可樂罐”識別的算法改進




what is opencv (20)

我喜歡你的問題,不管它是否與主題無關:P

一個有趣的旁白; 我剛剛完成了我的學位課程,涵蓋了機器人和計算機視覺。 我們這個學期的項目與你描述的那個非常相似。

我們不得不開發一種機器人,它使用Xbox Kinect來檢測各種照明和環境條件下任何方向的可樂瓶和罐頭。 我們的解決方案包括在Hue通道上結合hough circle變換使用帶通濾波器。 我們能夠限制環境(我們可以選擇在何處以及如何定位機器人和Kinect傳感器),否則我們將使用SIFT或SURF變換。

你可以在我的博客文章中閱讀關於該主題的方法 :)

過去幾年中我最感興趣的項目之一就是一個關於圖像處理的項目。 我們的目標是開發一個能夠識別可口可樂'罐'的系統 (請注意,我強調'罐'這個詞,你會在一分鐘內看到為什麼。 您可以在下面看到一個示例,其中可以通過縮放和旋轉在綠色矩形中識別。

項目的一些限制:

  • 背景可能非常嘈雜。
  • 可以具有任何比例旋轉或甚至定向(在合理範圍內)。
  • 圖像可能有一定程度的模糊性(輪廓可能不完全是直的)。
  • 圖像中可能有可口可樂瓶,算法只應檢測罐頭
  • 圖像的亮度可能會有很大的差異(所以你不能在顏色檢測上“過多”)。
  • 罐子可以部分隱藏在側面或中間,並且可能部分隱藏在瓶子後面。
  • 在圖像中完全沒有可能 ,在這種情況下,你必須找不到任何東西,並寫出一條消息說明。

所以你最終可能會遇到這樣棘手的事情(在這種情況下,我的算法完全失敗):

我前段時間做過這個項目,並且做了很多樂趣,並且我有一個體面的實現。 以下是關於我的實現的一些細節:

語言 :使用OpenCV庫在C ++中完成。

預處理 :對於圖像預處理,即將圖像轉換為更加原始的形式以提供給算法,我使用了2種方法:

  1. 將顏色區域從RGB更改為HSV並根據“紅色”色調進行過濾,在特定閾值以上進行飽和以避免類橙色的顏色,並對低值進行過濾以避免產生深色調。 最終結果是二進制黑白圖像,其中所有白色像素都代表與此閾值匹配的像素。 很明顯,圖像中仍然有很多垃圾,但是這會減少你需要處理的尺寸數量。
  2. 使用中值濾波進行噪聲濾波(取所有鄰居的中值像素值並用此值替換像素)以減少噪聲。
  3. 使用Canny邊緣檢測濾波器在2個先例步驟之後獲取所有項目的輪廓。

算法 :我為這項任務選擇的算法本身取自this本關於特徵提取的真棒書籍,稱為廣義霍夫變換 (與常規霍夫變換非常不同)。 它基本上說了幾件事情:

  • 您可以在不知道其分析方程的情況下描述空間中的物體(這裡就是這種情況)。
  • 它可抵抗像縮放和旋轉等圖像變形,因為它將基本上針對縮放因子和旋轉因子的每種組合來測試圖像。
  • 它使用算法將“學習”的基礎模型(模板)。
  • 基於從模型中學到的內容,輪廓圖像中剩餘的每個像素將投票給另一個像素,該像素將被視為對象的中心(就重力而言)。

最後,你會得到一張選票的熱圖,例如在這裡can的輪廓的所有像素都會投票給它的引力中心,所以你將在同一個像素中得到很多投票,這對應於中心,並將在熱圖中看到一個高峰,如下所示:

一旦你有了這個,一個簡單的基於閾值的啟發式可以給你的中心像素的位置,從中你可以導出比例和旋轉,然後繪製你的小矩形(最終比例和旋轉因子顯然是相對於你的原始模板)。 理論上至少...

結果 :現在,雖然這種方法適用於基本案例,但在一些地區卻嚴重缺乏:

  • 非常慢 ! 我沒有足夠強調這一點。 需要幾乎整整一天來處理30個測試圖像,顯然是因為我有很高的旋轉和平移比例因子,因為一些罐子很小。
  • 當圖像中的瓶子完全丟失時,由於某種原因,幾乎總是找到瓶子而不是罐子(可能因為瓶子更大,因此像素更多,因此票數更多)
  • 模糊的圖像也不是很好,因為選票以中心周圍隨機位置的像素結束,因此以非常嘈雜的熱圖結束。
  • 翻譯和旋轉方面的差異已達到,但不是定向的,這意味著沒有直接面對相機目標的罐頭未被識別。

您能否幫助我改進我的特定算法,僅使用OpenCV功能來解決上述四個具體問題?

我希望有些人也會從中學到一些東西,畢竟我不僅認為提出問題的人應該學習。 :)


If you are interested in it being realtime, then what you need is to add in a pre-processing filter to determine what gets scanned with the heavy-duty stuff. A good fast, very real time, pre-processing filter that will allow you to scan things that are more likely to be a coca-cola can than not before moving onto more iffy things is something like this: search the image for the biggest patches of color that are a certain tolerance away from the sqrt(pow(red,2) + pow(blue,2) + pow(green,2)) of your coca-cola can. Start with a very strict color tolerance, and work your way down to more lenient color tolerances. Then, when your robot runs out of an allotted time to process the current frame, it uses the currently found bottles for your purposes. Please note that you will have to tweak the RGB colors in the sqrt(pow(red,2) + pow(blue,2) + pow(green,2)) to get them just right.

Also, this is gona seem really dumb, but did you make sure to turn on -oFast compiler optimizations when you compiled your C code?


嗯,我真的認為我正在做一些事情 (這就像有史以來最有趣的問題 - 所以儘管找到了可以接受的答案,但不會繼續試圖找到“完美”的答案是很遺憾的).. 。

一旦你找到了標誌,你的麻煩就完成了一半。 那麼你只需要弄清楚標誌周圍的區別。 另外,我們希望盡可能少做一點。 我認為這實際上是這個簡單的部分...

徽標周圍有什麼? 對於罐頭,我們可以看到儘管有照明效果的金屬,其基本顏色也不會改變。 只要我們知道標籤的角度,我們就可以知道它的正上方,所以我們看看它們之間的區別:

在這裡,標誌的上方和下方是完全黑暗的,顏色一致。 在這方面相對容易。

在這裡,上面和下面的內容很簡單,但顏色仍然一致。 這是全銀色的,全銀色的金屬看起來很罕見,以及一般的銀色。 此外,它的厚度很薄,足夠接近已經識別出來的紅色,所以你可以追踪其整個長度的形狀,以計算可以被認為是罐的金屬環的百分比。 真的,你只需要罐子裡任何地方的一小部分就可以知道它是其中的一部分,但你仍然需要找到一個平衡點,以確保它不僅僅是一個帶有金屬物的空瓶子。

最後,那個棘手的問題。 但不是那麼棘手,一旦我們只能通過我們可以直接看到紅色包裝上面(和下面)看到的東西。 它的透明度,這意味著它會顯示它背後的一切。 這很好,因為它背後的東西不可能像罐子的銀色圓形金屬一樣顏色一致。 背後可能有很多不同的東西,它會告訴我們它是一個空的(或裝滿了清澈的液體)瓶子,或一致的顏色,這可能意味著它充滿了液體,或者瓶子只是在純色。 我們正在處理最接近頂部和底部的東西,而正確的顏色在合適的位置的機會相對較小。 我們知道這是一個瓶子,因為它沒有獲得罐子的關鍵視覺元素,與瓶子後面的可能元素相比,這是相對簡單的。

(最後一個是我能找到的最大的一個空的大型可口可樂瓶 - 有趣的是,瓶蓋和環是黃色的,表明可能不應該依賴瓶蓋的發紅)

在極少數情況下,瓶子後面有類似的銀色陰影,即使在塑料的抽像或瓶子以某種方式充滿相同銀色液體的陰影之後,我們可以回溯到我們可以粗略估計的是正如我所提到的,銀的形狀是圓形的,並且遵循罐的形狀。 但即使我在圖像處理方面缺乏一定的知識,這聽起來也很慢。 更好的是,為什麼不通過一次檢查徽標的兩側來確保這裡沒有相同的銀色? 啊,但如果罐子後面有同樣的銀色陰影呢? 然後,我們確實必須更多地關注形狀,再次查看罐的頂部和底部。

取決於這一切應該如何完美無缺,它可能非常緩慢,但我想我的基本概念是首先檢查最簡單和最接近的事情。 在著手研究其他元素的形狀之前,通過已經匹配的形狀周圍的顏色差異(這看起來是最無關緊要的部分)。 列出它,它會:

  • 找到主要景點(紅色標識背景,可能還有標識本身的方向),但如果罐子被關閉,則需要專注於紅色)
  • 驗證形狀和方向,再次通過非常鮮明的發紅
  • 檢查形狀周圍的顏色(因為它是快速和無痛的)
  • 最後,如果需要,請驗證主要景點周圍那些顏色的形狀以獲得正確的圓度。

如果你無法做到這一點,這可能意味著罐頭的頂部和底部被覆蓋了,而人類可能用來可靠地區分罐頭和瓶子的唯一可能的事情是閉塞和反射的罐頭,這將是一個難以處理的戰鬥。 然而,為了更進一步,您可以使用其他答案中提到的半透明掃描技術,按照罐頭/瓶子的角度來檢查更多瓶狀特徵。

有趣的額外噩夢可能包括一個便利的坐在瓶子後面的距離,它的金屬恰好顯示在標籤的上方和下方,只要你沿著紅色的整個長度掃描,它仍會失敗標籤 - 這實際上更像是一個問題,因為您沒有在可能的位置檢測到罐子,而不是考慮到您實際上是在檢測瓶子,包括罐子在內。 在這種情況下,杯子是半空的!

作為一個免責聲明,我沒有經驗也沒有想過在這個問題之外的圖像處理,但它是如此有趣,讓我對它深思熟慮,在閱讀所有其他答案之後,我認為這可能是最簡單最有效的方式來完成它。 就個人而言,我只是很高興我實際上不必考慮編程!

編輯

另外,看看我在MS Paint中做過的這張圖畫......這絕對是可怕的,並且很不完整,但是僅僅基於形狀和顏色,你可以猜測它可能會是什麼。 從本質上講,這是唯一需要打擾掃描的東西。 當你仔細觀察這種非常獨特的形狀和顏色組合時,還有什麼可能呢? 我沒有畫的那一點,白色背景,應該被認為是“任何不一致的東西”。 如果它有一個透明的背景,它可以覆蓋幾乎任何其他圖像,你仍然可以看到它。


有趣的問題:當我瞥了一下你的瓶子圖像時,我以為它也是一個罐子。 但是,作為一個人,我做了什麼來區分它,然後我注意到它也是一個瓶子......

因此,要分開罐頭和瓶子,先簡單掃描瓶子怎麼樣? 如果你找到一個,在找罐之前掩蓋標籤。

如果你已經在做罐子,不難實現。 真正的缺點是它會使處理時間加倍。 (但是想想現實世界的應用程序,你最終會想要做瓶子;-)


我回答這個問題遲了幾年。 在過去的5年中,由於CNN推動了最新的技術發展,我現在不會使用OpenCV來完成這項任務! ( 我知道你特別想在這個問題中使用OpenCv特性 )與OpenCV特性相比,我認為諸如Faster-RCNN,YOLO,SSD等對象檢測算法可以大幅度提高這個問題。 如果我現在要解決這個問題(6年後!!),我肯定會使用Faster-RCNN


如果你不僅僅局限於一台不在你的限制範圍內的相機,也許你可以轉向使用像Xbox Kinect這樣的距離傳感器。 有了這個,你可以執行深度和顏色匹配的圖像分割。 這可以更快地分離圖像中的物體。 然後,您可以使用ICP匹配或類似技術來匹配罐的形狀,而不僅僅是它的輪廓或顏色,並且假設它是圓柱形的,如果您之前有3D目標掃描,這對任何方向都是有效的選擇。 這些技術通常很快,特別是在用於解決速度問題的特定目的時。

此外,我可以建議,不一定是為了準確性或速度,但為了好玩,您可以在色相分割圖像上使用經過訓練的神經網絡來識別罐的形狀。 這些速度非常快,通常可以達到80/90%的準確度。 培訓將是一個漫長的過程,因為您必須手動識別每個圖像中的罐頭。


我真的很喜歡達倫庫克和堆垛機對這個問題的答案 。 我正在將自己的想法投入到對這些問題的評論中,但我相信我的方法太複雜,不能離開這裡。

簡而言之,您已經確定了一種算法來確定可口可樂徽標存在於空間中的特定位置。 對於任意方向和任意比例因子,您現在試圖確定一種適合將可口可樂與其他物體進行區分的啟發式方法,包括與此標誌性標識相關的瓶子廣告牌廣告可口可樂用具 。 你在問題陳述中沒有提到很多這些額外的案例,但是我認為它們對於算法的成功至關重要。

這裡的秘訣在於確定可以包含哪些視覺特徵,或者通過負面空間確定其他可口可樂產品中不存在的可用特徵。 為此, 當前的最佳答案勾畫出一個基本的方法來選擇“罐子”,當且僅當“瓶子”沒有被識別,或者是瓶蓋,液體或其他類似的視覺啟發式的存在。

問題是這個失敗。 例如,瓶子可能是空的,並且缺少蓋子,導致誤報。 或者,它可能是一個部分瓶子,具有額外的功能,再次導致錯誤檢測。 不用說,這不是優雅的,對我們的目的也不是有效的。

為此,罐的最正確的選擇標準似乎如下:

  • 正如你在問題中勾畫出的那樣,物體輪廓的形狀是否正確? 如果是這樣,+1。
  • 如果我們假設存在自然光或人造光,我們是否會檢測到瓶子上的鉻輪廓,表示這是否由鋁製成? 如果是這樣,+1。
  • 相對於我們的光源( 光源檢測的 說明性視頻鏈接 ),我們是否確定對象的鏡面反射屬性是正確的? 如果是這樣,+1。
  • 我們是否可以確定任何有關將其標識為罐子的對象的其他屬性,包括但不限於徽標的拓撲圖像歪斜,對象的方向,對象的並置(例如,在平面表面上就像一張桌子或其他罐子一樣),還有一個拉式標籤? 如果是這樣,每個+1。

您的分類可能如下所示:

  • 對於每個候選比賽,如果檢測到可口可樂徽標的存在,繪製一個灰色邊框。
  • 對於+2以上的每場比賽,繪製一個紅色邊框。

這在視覺上向用戶突出顯示檢測到的內容,強調可能正確地檢測為不合格罐頭的弱陽性。

每個屬性的檢測都帶有非常不同的時間和空間複雜性,對於每種方法,通過http://dsp.stackexchange.com進行快速傳遞對於為您的目的確定最正確和最有效的算法更合理。 我的目的是純粹而簡單地強調, 通過使候選檢測空間的一小部分無效檢測是否是可能的,並不是解決這個問題的最有力和最有效的解決方案,理想情況下,您應該採取適當的措施因此。

嘿,祝賀黑客新聞發布! 總的來說,這是一個相當不錯的問題值得它收到的宣傳。 :)


另一種方法是使用尺度不變特徵變換 (SIFT)或加速穩健特徵 (SURF)提取特徵(關鍵點)。

它在OpenCV 2.3.1中實現。

您可以在Features2D + Homography中使用功能找到一個很好的代碼示例來查找已知對象

兩種算法對縮放和旋轉都不變。 由於它們可以處理特徵,因此您還可以處理occlusion (只要有足夠的關鍵點可見)。

圖片來源:教程示例

SIFT的處理需要幾百毫秒,SURF速度更快,但不適合實時應用。 ORB使用對旋轉不變性較弱的FAST。

原始文件


請看看Zdenek Kalal的“ 捕食者”追踪器 。 它需要一些培訓,但它可以主動了解跟踪對像如何看待不同的方向和尺度,並實時進行!

源代碼可在他的網站上找到。 它在MATLAB ,但也許有一個Java實現已經由社區成員完成。 我已經用C#成功地重新實現了TLD的跟踪器部分。 如果我沒有記錯的話,TLD正在使用Ferns作為關鍵點檢測器。 我使用SURF或SIFT(已由@stacker建議)重新獲取對象,如果它被跟踪器丟失的話。 跟踪器的反饋使得用時間建立篩選/衝浪模板的動態列表變得很容易,這些模板隨著時間的推移能夠以非常高的精度重新獲得對象。

如果您對我的C#實現跟踪器感興趣,請隨時詢問。


Maybe too many years late, but nevertheless a theory to try.

The ratio of bounding rectangle of red logo region to the overall dimension of the bottle/can is different. In the case of Can, should be 1:1, whereas will be different in that of bottle (with or without cap). This should make it easy to distinguish between the two.

Update: The horizontal curvature of the logo region will be different between the Can and Bottle due their respective size difference. This could be specifically useful if your robot needs to pick up can/bottle, and you decide the grip accordingly.


我認為,我喜歡這個挑戰,並想給出一個解決這個問題的答案。

  1. 提取徽標的特徵(關鍵點,描述符,如SIFT,SURF)
  2. 將這些點與標誌的模型圖像匹配(使用匹配器,如Brute Force)
  3. 估計剛體的坐標(PnP問題 - SolvePnP)
  4. 根據剛體估算帽蓋位置
  5. 做背投併計算瓶蓋的圖像像素位置(ROI)(我假設你有相機的固有參數)
  6. 用方法檢查蓋子是否在那裡。 如果有的話,那就是瓶子

檢測瓶蓋是另一個問題。 它可以是複雜的或簡單的。 如果我是你,我會簡單地檢查ROI中的顏色直方圖。

如果我錯了,請提供反饋。 謝謝。


有許多顏色描述符用於識別對象,下面的文章比較了很多。 與SIFT或SURF結合使用時,它們特別強大。 SURF或SIFT本身在可口可樂罐頭圖像中並不是很有用,因為它們不能識別很多興趣點,所以需要顏色信息來幫助。 我在一個項目中使用BIC(邊框/內部像素分類)和SURF,它很好地識別物體。

用於Web圖像檢索的顏色描述符:比較研究


您需要一個能夠從經驗中有機地學習和提高分類準確性的程序。

我會建議深入學習,深入學習這將變成一個小問題。

您可以在Tensorflow上重新訓練初始v3模型:

如何重新設定新類別的最初層次

在這種情況下,您將會訓練卷積神經網絡來將對象分類為可口可樂或不可口可樂。


這可能是一個非常天真的想法(或根本不可行),但所有可樂罐的尺寸都是固定的。 因此,如果相同的圖像同時包含一個罐子和一個瓶子,那麼你可以通過尺寸考慮來區分它們(瓶子將變得更大)。 現在由於缺少深度(即3D映射到2D映射),可能會出現瓶子收縮並且尺寸沒有差異。 您可以使用stereo-imaging恢復一些深度信息,然後恢復原始大小。


看著形狀

以甘蔗罐頭/瓶子的紅色部分為形狀。 請注意罐子的頂端是如何逐漸變細的,而瓶子的標籤是直的。 你可以通過比較紅色部分在整個長度上的寬度來區分這兩者。

看看亮點

一種區分瓶子和罐子的方法是材料。 瓶子由塑料製成,而罐子由鋁金屬製成。 在光線充足的情況下,查看鏡面反射將是從罐頭標籤告訴瓶子標籤的一種方式。

據我所知,這是人類如何分辨這兩種標籤之間的區別。 如果照明條件差,那麼在區分兩者時肯定會存在一些不確定性。 在這種情況下,您必須能夠檢測到透明/半透明瓶本身的存在。


為了加快速度,我會利用這樣一個事實,即不要求您找到任意圖像/對象,但特別是帶有可口可樂徽標的圖像/對象。 這很重要,因為這個標識非常有特色,並且它在頻域中應該有一個特徵,尺度不變的特徵,特別是在RGB的紅色通道中。 也就是說,水平掃描線(在水平對齊的徽標上訓練)遇到的紅色到白色到紅色的交替模式在穿過徽標的中心軸時將具有獨特的“節奏”。 該節奏將在不同的尺度和方向上“加速”或“放慢速度”,但仍將按比例相等。 您可以識別/定義幾十條這樣的掃描線,橫向和縱向穿過徽標,還有幾個對角線,以星爆圖案。 稱這些為“簽名掃描線”。

在目標圖像中搜索此簽名是一個簡單的問題,即以水平條形式掃描圖像。 在紅色通道中尋找高頻(指示從紅色區域移動到白色區域),一旦找到,看它是否跟隨在培訓課程中確定的一個頻率節奏。 一旦找到匹配,您將立即知道掃描線在徽標中的方向和位置(如果您在訓練過程中記錄了這些內容),那麼從中識別徽標的邊界是微不足道的。

如果這不是線性有效的算法,或者幾乎如此,我會感到驚訝。 它顯然沒有解決你的瓶子歧視問題,但至少你會有你的標識。

(更新:為了識別瓶子,我會在標識附近尋找可樂(棕色液體) - 也就是說, 瓶子內部 ,或者在空瓶子的情況下,我會尋找一個總是帶有相同的基本形狀,大小和距離的標誌,通常是全白色或紅色。搜索一個純色橢圓形的帽子應該是,相對於標誌,當然不是萬無一失,但你的目標應該是快速找到容易的人。)

(從我的圖像處理時代開始已經有幾年了,所以我保留了這個高層次和概念性的建議,我認為它可能略微接近人眼可能的運作方式 - 或者至少我的大腦是如何運作的!)


即使人類在第二個圖像中區分瓶子和罐子也不難(假設瓶子的透明區域被隱藏)?

除了一個非常小的區域外,它們幾乎是一樣的(也就是說,罐子頂部的寬度有點小,而瓶子的包裝寬度始終是相同的寬度,但稍微變化一下吧?)。

我想到的第一件事就是檢查瓶子的紅色頂部。 但如果瓶子沒有頂部,或者部分隱藏(如上所述),這仍然是一個問題。

我認為的第二件事是關於瓶子的透明度。 OpenCV有一些在圖像中查找透明對象的工作。 檢查下面的鏈接。

尤其要看這個,看他們如何準確地檢測玻璃:

看他們的結果:

他們說這是"A Geodesic Active Contour Framework for Finding Glass" by K. McHenry and J. Ponce, CVPR 2006.的論文"A Geodesic Active Contour Framework for Finding Glass" by K. McHenry and J. Ponce, CVPR 2006. . (下載文件)

這可能對你的情況有所幫助, 但如果瓶子被填滿問題又會再次出現。

所以我認為在這裡,您可以先搜索瓶子的透明體,或者在側面搜索與兩個透明物體相連的紅色區域,這顯然是瓶子。 (理想情況下,如下圖所示。)

現在,您可以移除黃色區域,即瓶子的標籤並運行算法以找到罐子。

無論如何,這個解決方案在其他解決方案中也有不同的問題。

  1. 它只有在你的瓶子是空的時才有效。 在這種情況下,您將不得不搜索兩種黑色之間的紅色區域(如果可口可樂液體是黑色的)。
  2. 另一個問題是如果透明部分被覆蓋。

但無論如何,如果照片中沒有上述問題,這似乎是一個更好的方法。


我不知道OpenCV,但從邏輯上看問題,我認為你可以通過改變你正在尋找的圖像即可口可樂來區分瓶子和罐頭。 你應該加入到罐頭的頂部,因為在可口可樂的頂部有銀色襯裡的情況下,並且在瓶子的情況下不會有這樣的銀色襯裡。

但顯然這種算法在罐頂被隱藏的情況下會失敗,但在這種情況下,即使人類也不能區分這兩者(如果只有瓶/罐的可口可樂部分可見)


深度學習

收集至少幾百張包含可樂罐頭的圖像,將它們周圍的邊界框註釋為正面課程,包括可樂瓶和其他可樂產品將它們標記為負面課程以及隨機對象。

除非您收集非常大的數據集,否則請執行使用小型數據集的深度學習功能的技巧。 理想情況下,使用支持向量機(SVM)與深度神經網絡的組合。

一旦將圖像提供給以前訓練過的深度學習模型(例如GoogleNet),而不是使用神經網絡的決策(最終)圖層進行分類,則可以使用先前圖層的數據作為特徵來訓練分類器。

OpenCV和Google Net: http://docs.opencv.org/trunk/d5/de7/tutorial_dnn_googlenet.html : http://docs.opencv.org/trunk/d5/de7/tutorial_dnn_googlenet.html

OpenCV和SVM: http://docs.opencv.org/2.4/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html : http://docs.opencv.org/2.4/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html


我會檢測紅色矩形:RGB - > HSV,過濾器紅色 - >二值圖像, close (膨脹然後侵蝕,在matlab中稱為imclose

然後查看從最大到最小的矩形。 在已知位置/比例中具有較小矩形的矩形都可以被移除(假設瓶子比例不變,較小的矩形將是瓶蓋)。

這會給你留下紅色的矩形,那麼你需要以某種方式檢測這些標誌,以判斷它們是紅色矩形還是焦炭罐。 像OCR一樣,但帶有已知的徽標?





opencv