我一直在努力解決一段時間的小問題,只是無法弄清楚什麼是錯的。尋找最遠距離的像素(開放式簡歷)
所以我有一個黑色的126×126圖像與1像素的藍色邊框([B,G,R] = [255,0,0])。 我想要的是距離所有藍色像素(例如邊界)最遠的像素。我明白這是如何完成的。遍歷每一個像素,如果它是黑色的,然後計算每個其他像素的距離,藍色尋找最小值,然後選擇與任何藍色的最小距離最大的黑色像素。
注意:我不需要真正知道真正的距離,所以當做距離的平方和我不平方根時,我只想知道哪個距離更大(更便宜)。
我做的第一件事是循環遍歷每個像素,如果它是藍色的,則將行和列添加到矢量中。我可以確認這部分工作正常。接下來,我再次遍歷所有像素,並將每個黑色像素的距離與藍色像素向量中的每個像素進行比較。
其中藍色是藍色的物體的向量(具有行和列) 區域是圖像
int distance;
int localShortest = 0;
int bestDist = 0;
int posX = 0;
int posY = 0;
for(int i = 0; i < image.rows; i++)
{
for(int j = 0; j < image.cols; j++)
{
//Make sure pixel is black
if(image.at<cv::Vec3b>(i,j)[0] == 0
&& image.at<cv::Vec3b>(i,j)[1] == 0
&& image.at<cv::Vec3b>(i,j)[2] == 0)
{
for(int k = 0; k < blue.size(); k++)
{
//Distance between pixels
distance = (i - blue.at(k).row)*(i - blue.at(k).row) + (j - blue.at(k).col)*(j - blue.at(k).col);
if(k == 0)
{
localShortest = distance;
}
if(distance < localShortest)
{
localShortest = distance;
}
}
if(localShortest > bestDist)
{
posX = i;
posY = j;
bestDistance = localShortest;
}
}
}
}
這工作絕對罰款周圍邊緣的1個像素的邊框。 https://dl.dropboxusercontent.com/u/3879939/works.PNG
同樣,如果我添加更多的藍色,但保留一個方形ish黑色區域,那麼它也可以。 https://dl.dropboxusercontent.com/u/3879939/alsoWorks.PNG
但是,只要我使圖像沒有方形的黑色部分,但也許是矩形。然後,'最遠的'關閉。有時甚至說藍色像素距離藍色最遠,這是不正確的。
https://dl.dropboxusercontent.com/u/3879939/off.PNG
任何幫助,非常感謝!傷了我的腦袋。
對!我明白你的意思。換句話說,對於多個像素獲得相同的最小值,因此它不會被替換爲不大於當前最小值。所以我需要制定一種方法來集中這一點。至少給了我一些指導,謝謝。 – user1708997
我不確定這是如何工作的第三張圖片(請參閱編輯後)。它似乎是在藍色區域內設置最佳距離。 – user1708997