1
我正在嘗試製作一個算法,以填充線性複雜度中的輪廓。我知道這樣的算法存在。我已經在某處讀到它與交叉口數量有關的問題,但有一個特殊情況,我還沒有很好的解決問題。填充輪廓的線性算法
到目前爲止,我已經嘗試使用以下算法。請注意,我無法訪問以前的元素(左側),因爲它們會/可能會被改寫:
for (int y = blob->miny; y < blob->maxy; ++y)
{
int NumberOfBorderCrossings = 0;
unsigned int NextElem = 0;
unsigned int NextNextElem = 0;
for (int x = blob->minx-1; x < blob->maxx-1; ++x)
{
NextElem = CV_IMAGE_ELEM(labelimg,unsigned int,y,x+1);
NextNextElem = CV_IMAGE_ELEM(labelimg,unsigned int,y,x+2);
if (CV_IMAGE_ELEM(labelimg,unsigned int,y,x) != label)
{
if (NextElem == label && NextNextElem != label)
++NumberOfBorderCrossings;
else
if (NumberOfBorderCrossings%2)
CV_IMAGE_ELEM(labelimg,unsigned int,y,x) = label;
}
}
}
結果我得到的是以下幾點。輸入在右邊(所有非黑色像素必須被複制),而錯誤的輸出在左邊。再次請注意,我只有圖像的輪廓在右側(未呈現)。
'++ x'&'++ y'?那真的是你想要的嗎? – devnull 2013-04-05 13:13:22
是的,圖像有多行。線性我的意思是線性複雜度(與斑點的大小線性縮放) – 2013-04-05 13:16:11
詳細說明「填充輪廓」的含義是有幫助的。 – 2013-04-05 13:25:13