簡體   English   中英

如何在不使用C ++的任何庫的情況下檢測圖像中的對象?

[英]How to Detect Objects in the Image without using any library in C++?

我正在用C++編寫一個需要一點圖像處理的應用程序。 由於我是該領域的新手,所以我不知道從哪里開始。

基本上我有一個圖像,其中包含帶有多個框的矩形。 我想要的是能夠隔離該rectangle (x, y, width, height) ,以及獲取其中每個框的中心坐標(共18個)。

我當時在考慮使用一個簡單的for循環遍歷圖像中的像素,直到找到圖案為止,但我想知道是否有更有效的方法。 我也想看看我是否可以有效地做到這一點,而無需使用像OpenCV.這樣的大型庫OpenCV.

這是幾個示例圖像,將不勝感激:

在此處輸入圖片說明

另外,還有什么好的資源可以讓我更多地了解像這樣的圖像處理。

這里的檢測算法可能非常簡單。 方框(BOS)始終與圖像的邊緣對齊,並且結構簡單。 這是我的處理方法。

  1. 選擇一個色彩空間。 假設RGB暫時可以,但是在其他情況下可能會更好。

  2. 每行

    1. 對於每個像素,計算像素與其正下方的像素之間的幅度差。 幅度差就是sqrt((Xx)^ 2 +(Yy)^ 2 +(Zz)^ 2)),其中X,Y,Z是第一個像素的顏色坐標,而x,y,z是顏色坐標在其下方的像素。 對於RGB,當然是XYZ = RGB。

    2. 計算低於某個閾值magThresh的連續差異幅度的最大游程長度。 您也可以選擇一個寬容的版本:最大運行長度,但允許的入侵長度長達intrLen像素,而之后必須進行多達contLen像素的長時間運行。 這是為了照顧正方形邊緣的可能的線對線差異。

  3. 查找最大游程長度在minWidth之上和maxWidth之下的最大連續行。

因此,您已經找到了包含框的線,並且通過重新計算上述2.1中的數據,您將知道框在水平坐標中的位置。

通過重復相同的操作但在框內從左到右掃描,可以檢測框的邊緣。 屆時,您將擁有近似的框形質心,而不會注意到像素之間的滲色。

我想,這可以通過在各種卷積核中反復運行映像,然后進行閾值處理來完成。 好消息是這兩個操作都具有非常快的庫實現。 您不想手動重新實現它們,這可能會大大降低速度。

如果您堅持要自己做(我個人會使用OpenCV ,這是一種行業優勢並且是免費的),那么您首先需要一種邊緣檢測算法。 互聯網上有很多,但是要為一些令人恐懼的數學做好准備...

許多方法涉及遍歷每個像素,並將其及其鄰居的值提升為矩陣,然后與核矩陣進行卷積。 請注意,必須對每個像素(原則上,就您而言,您可以停在第一個發現的矩形處)和每個顏色通道都進行此操作-因此,強烈建議使用GPU。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM