int main(int argc, char** argv)
{
cv::Mat1b i1(cv::Size(1, 2));
i1.at<uchar>(0, 0) = 1;
i1.at<uchar>(1, 0) = 1;
cv::Mat1b mask(i1.size());
mask.at<uchar>(0, 0) = 1;
mask.at<uchar>(1, 0) = 0;
cv::Mat1b masked;
mask.copyTo(masked, mask);
masked.release(); //or .deallocate()
cout << masked << endl;
i1.copyTo(masked, 1 - mask);
cout << masked << endl;
return 0;
}
は非常に動作が異なります。後者の場合、行列masked
はまったく変更されておらず、出力masked
はマスクされたマスクされた行列と反転されたマスクされた行列の合計であり、したがって元のim1
行列に等しい。 deallocate()
メンバーメソッドは実際に何をしていますか?私はopenCV 3.1を使用します。
[Mat :: release](http://docs.opencv.org/master/d3/d63/classcv_1_1Mat.html#ae48d4913285518e2c21a3457017e716e)。 'deallocate()'を呼び出した後にオブジェクトを使うことで、未定義の動作が起こりそうです。 – melak47
私は 'release()'と 'deallocate()'が同じことをすると思います。また、両方ともオブジェクトを「クリア」状態のままにしておく必要があります。 – hovo
ドキュメントでは、 'release()'と 'deallocate()'が同じことをしないことを明確に述べています:) – melak47