Mat::clone and Mat::operator =
Similar questions have been raised, but I am still unsure, when to use clone and when to use = operator. clone makes a full copy, whereas = creates a new header only, but shares the pixel data.
Does this mean that in Example 1, the pixel data of image are modified and visible to the caller?
If yes, I have to clone the image, where the image by the caller is preserved, as in Example 2?
Example 1:
void GFTTDetector::detectImpl( const Mat& image, std::vector<KeyPoint>& keypoints, const Mat& mask) const
{
Mat grayImage = image;
if( image.type() != CV_8U ) cvtColor( image, grayImage, COLOR_BGR2GRAY );
...
}
Example 2:
void GFTTDetector::detectImpl( const Mat& image, std::vector<KeyPoint>& keypoints, const Mat& mask) const
{
Mat grayImage = image.clone();
if( image.type() != CV_8U ) cvtColor( image, grayImage, COLOR_BGR2GRAY );
...
}