質問: opencvの穴を埋める opencv (canny edge detection)のedge detectionモジュールから抽出されたedgeマップがあります。私がしたいのは、エッジマップの穴を埋めることです。私はc++およびopencvライブラリを使用しています。 opencvには cvfloodfill() 関数があり、穴をシードで塗りつぶします(フラッディングを開始する場所の1つを使用)。ただし、シードを知らずに内部の穴をすべて埋めようとしています(matlabの imfill() と同様)q1:「cvfloodfill()」を適用できるように、すべてのシードを見つける方法は? q2:「imfill()」と同等の実装方法opencvの初心者、および任意のヒントをいただければ幸いです。
回答: amroの答え。 の付録void cvfillholes(cv::mat &input) { //assume input is uint8 b & w (0 or 1) //this function imitates imfill(image,'hole') cv::mat holes=input.clone(); cv::floodfill(holes,cv::point2i(0,0),cv::scalar(1)); for(int i=0;i<input.rows*input.cols;i++) { if(holes.data[i]==0) input.data[i]=1; } }