0
我只有下列位圖: 什麼我要做的是自動填寫輪廓像下面這樣: 這有點像MS畫家填充功能。初始輪廓不會穿過圖像的邊界。如何使用opencv自動檢測並填充封閉區域?
我還沒有一個好主意呢。 OpenCV中有沒有辦法可以做到這一點?或者有什麼建議?
在此先感謝!
我只有下列位圖: 什麼我要做的是自動填寫輪廓像下面這樣: 這有點像MS畫家填充功能。初始輪廓不會穿過圖像的邊界。如何使用opencv自動檢測並填充封閉區域?
我還沒有一個好主意呢。 OpenCV中有沒有辦法可以做到這一點?或者有什麼建議?
在此先感謝!
如果您知道的區域必須被關閉,你可以橫向掃描,並保持邊緣計數:
// Assume image is an CV_8UC1 with only black and white pixels.
uchar white(255);
uchar black(0);
cv::Mat output = image.clone();
for(int y = 0; y < image.rows; ++y)
{
uchar* irow = image.ptr<uchar>(y)
uchar* orow = output.ptr<uchar>(y)
uchar previous = black;
int filling = 0;
for(int x = 0; x < image.cols; ++x)
{
// if we are not filling, turn it on at a black to white transition
if((filling == 0) && previous == black && irow[x] == white)
++filling ;
// if we are filling, turn it off at a white to black transition
if((filling != 0) && previous == white && irow[x] == black)
--filling ;
// write output image
orow[x] = filling != 0 ? white : black;
// update previous pixel
previous = irow[x];
}
}
輸入是否保證關閉?或者,例如,輸入是否有簡單的行?後者會將一個簡單的問題轉化爲更難的方法 – Bull
opencv中有一個[floodfill方法](http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#floodfill),其工作原理與一個在油漆。 – HugoRune