![](/img/trans.png)
[英]how to use main c++ program to build a sound related library (without using any third party library)
[英]How to Detect Objects in the Image without using any library in C++?
我正在用C++
編寫一個需要一點圖像處理的應用程序。 由於我是該領域的新手,所以我不知道從哪里開始。
基本上我有一個圖像,其中包含帶有多個框的矩形。 我想要的是能夠隔離該rectangle (x, y, width, height)
,以及獲取其中每個框的中心坐標(共18個)。
我當時在考慮使用一個簡單的for循環遍歷圖像中的像素,直到找到圖案為止,但我想知道是否有更有效的方法。 我也想看看我是否可以有效地做到這一點,而無需使用像OpenCV.
這樣的大型庫OpenCV.
這是幾個示例圖像,將不勝感激:
另外,還有什么好的資源可以讓我更多地了解像這樣的圖像處理。
這里的檢測算法可能非常簡單。 方框(BOS)始終與圖像的邊緣對齊,並且結構簡單。 這是我的處理方法。
選擇一個色彩空間。 假設RGB暫時可以,但是在其他情況下可能會更好。
每行
對於每個像素,計算像素與其正下方的像素之間的幅度差。 幅度差就是sqrt((Xx)^ 2 +(Yy)^ 2 +(Zz)^ 2)),其中X,Y,Z是第一個像素的顏色坐標,而x,y,z是顏色坐標在其下方的像素。 對於RGB,當然是XYZ = RGB。
計算低於某個閾值magThresh的連續差異幅度的最大游程長度。 您也可以選擇一個寬容的版本:最大運行長度,但允許的入侵長度長達intrLen像素,而之后必須進行多達contLen像素的長時間運行。 這是為了照顧正方形邊緣的可能的線對線差異。
查找最大游程長度在minWidth之上和maxWidth之下的最大連續行。
因此,您已經找到了包含框的線,並且通過重新計算上述2.1中的數據,您將知道框在水平坐標中的位置。
通過重復相同的操作但在框內從左到右掃描,可以檢測框的邊緣。 屆時,您將擁有近似的框形質心,而不會注意到像素之間的滲色。
我想,這可以通過在各種卷積核中反復運行映像,然后進行閾值處理來完成。 好消息是這兩個操作都具有非常快的庫實現。 您不想手動重新實現它們,這可能會大大降低速度。
如果您堅持要自己做(我個人會使用OpenCV
,這是一種行業優勢並且是免費的),那么您首先需要一種邊緣檢測算法。 互聯網上有很多,但是要為一些令人恐懼的數學做好准備...
許多方法涉及遍歷每個像素,並將其及其鄰居的值提升為矩陣,然后與核矩陣進行卷積。 請注意,必須對每個像素(原則上,就您而言,您可以停在第一個發現的矩形處)和每個顏色通道都進行此操作-因此,強烈建議使用GPU。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.