Der folgende CodeWas macht die Deallocate-Methode von cv :: Mat?
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;
}
verhält sich ganz anders, wenn masked.release()
durch masked.deallocate()
ersetzt wird. Im letzteren Fall scheint die Matrix masked
überhaupt nicht modifiziert zu sein, und die Ausgabe masked
ist die Summe der maskierten und invertierten maskierten Matrizen, also gleich der ursprünglichen im1
Matrix. Was macht deallocate()
Member-Methode eigentlich? Ich benutze openCV 3.1.
[Mat :: release] (http://docs.opencv.org/master/d3/d63/classcv_1_1Mat.html#ae48d4913285518e2c21a3457017e716e). Wenn Sie das Objekt nach dem Aufruf von 'deallocate()' verwenden, haben Sie wahrscheinlich ein undefiniertes Verhalten. – melak47
Ich würde denken, dass 'release()' und 'deallocate()' das gleiche tun. Und beide sollten das Objekt in einem "klaren" Zustand belassen. – hovo
Ausgenommen die Dokumentation besagt eindeutig, dass 'release()' und 'deallocate()' nicht dasselbe tun :) – melak47