0

Opencv 2.4.10。
以下のコードの最後で、マトリックス Img2 上の 9 幅のディスク構造要素を使用して膨張が呼び出されます。もともと、Img2 は単純なヘッダー コピー (Img2=Img1) によって Img1 から作成されました。Img1 が Img0 の最初と最後の 3 行を持たないように、範囲を介して Img0 からデータをコピーせずに Img1 が作成されたことに注意してください。拡張の結果が正しくありませんでした。

ただし、クローン Img2=Img1.clone() を介して Img2 の完全なコピーを使用すると、拡張は正しく機能しました。

以下のコードには示されていませんが、Img2 での imwrite の使用は、使用したコピー方法に関係なく同じであることに注意してください。では、モルフォロジー演算子も同じように機能するべきではないでしょうか?

Mat Tmp;
Mat Img1=Img0(Range(3-1, Img0.rows - 3+1),Range::all());

Img1(Range(0,1), Range::all()) = 0;
Img1(Range(Img1.rows-1,Img1.rows), Range::all()) = 0;

// bad
//Mat Img2 = Img1; // header only copy: the dilation results are wrong on the top and bottom 
// good
Mat Img2 = Img1.clone();  // full copy, dilation works right.

Mat Disk4;
// exact replacement for mmatlab strel('disk',4,0), somewhat difference   than opencv's ellipse structuring element.
MakeFilledEllipse( 4, 4, Disk4);  


// If I use Img2 from clone, this is the same as matlab's.  
// If I just do a header copy some areas the top and bottom are different
dilate(Img2, Tmp,Disk4, Point(-1,-1),1,BORDER_CONSTANT, Scalar(0));

編集- その後、Img2 が img1 を置き換え、img1 がないようにコードを単純化して、Mat ヘッダーの間接化の 1 レベルのみで問題を繰り返すことができ、同じように失敗しました (間違っていました)。

Mat Tmp;
Mat Img2=Img0(Range(3-1, Img0.rows - 3+1),Range::all());

Img2(Range(0,1), Range::all()) = 0;
Img2(Range(Img2.rows-1,Img2.rows), Range::all()) = 0;

Mat Disk4;
// exact replacement for mmatlab strel('disk',4,0), somewhat difference   than opencv's ellipse structuring element.
MakeFilledEllipse( 4, 4, Disk4);  

// bad result   
dilate(Img2, Tmp,Disk4, Point(-1,-1),1,BORDER_CONSTANT, Scalar(0));
4

1 に答える 1

0

Matそれ自体の中で ROI を選択する効果で不連続になりました。

あなたの場合はfalseMat Mat::operator()( Range _rowRange, Range _colRange ) constに設定されるかどうかはわかりませんが、確実に設定されるため、異なる操作につながる可能性があります。CONTINUOUS_FLAGSUBMATRIX_FLAG

ここで、ROI の周りの元の画像にピクセルがある場合、一部の部分cv::dilate()(境界ピクセル外挿法、またはピクセル近傍の形状を決定する構造化要素など) が出力に影響すると思います。

を呼び出す前に、次を使用してメモリを並べ替えることをお勧めしますcv::dilate()

if (!mat.isContinuous() || mat.isSubmatrix())
{ 
    mat = mat.clone();
}
于 2015-02-19T13:06:42.110 に答える