0

cv :: grabCutを使用して、画像からオブジェクトを抽出しました。それはうまく動作します。

これで、オブジェクトを背景のない別のマットに入れました。オブジェクト全体に黒色を設定したいと思います。GC_PR_FGDでマークされたすべてのピクセル(前景ピクセル)に黒色を設定したい。

これどうやってするの?

ありがとう!!

4

1 に答える 1

1

cv :: grabCutのドキュメントから、次の値のマスクを出力として取得できるようです。

  • GC_BGD確かに背景ピクセル
  • GC_FGD確かに前景(オブジェクト)ピクセル
  • GC_PR_BGDおそらく背景ピクセル
  • GC_PR_FGD前景ピクセルの可能性があります

背景を白、前景を黒の画像が必要だと思います。その場合、新しいマトリックスを作成し、マスクピクセルをループしながら、マスクピクセルの値に応じて、そのマトリックスに0または1(または255)を割り当てます。

たとえばcv::Mat mask、アルゴリズムの結果としてaを取得したと仮定して、次のようにします(警告、コンパイルしていません、概算です)。

cv::Mat binaryImage = zeros(mask.rows, mask.cols, CV_8U);

for (int i==0; i<mask.rows; ++i){
    for (int j==0; j<mask.cols; ++j){
        // choose pixels that are certainly or likely background
        if (mask.at<uchar>(i,j) == GC_BGD || mask.at<uchar>(i,j) == GC_BGD){
            binaryImage.at<uchar>(i,j) = 255;
        }
    }
}
于 2012-10-10T04:22:13.943 に答える