图像复制
- 共享数据, 使用 new Mat(srcMat, ...) 和 newMat=srcMat 生成新的Mat都和原Mat共享数据, 也就是说如果修改某一Mat,其他Mat也会随之改变
- 复制全新的Mat, 使用CopyTo() 和 Clone() 方法将生成一个全新的Mat, 新Mat和原Mat不共享数据.
图像共享数据的测试
private void copyMats()
{
string pngFile = @"D:\my_workspace\opencv\images\draw.png";
var mat = Cv2.ImRead(pngFile, ImreadModes.Color);
//通过指定Rect方式截取图像,新的Mat和原Mat共享数据
var partRef1 = new Mat(mat, new Rect(0, 0, mat.Width, mat.Height));
//通过指定rowRange和colRange方式截图图像,新的Mat和原Mat共享数据
var partRef2 = new Mat(mat, rowRange: new Range(50, 300), colRange: Range.All);
//CopyTo()和Clone()都是复制出一份新的Mat
var deepCopyMat = new Mat();
mat.CopyTo(deepCopyMat);
var cloneMat = mat.Clone();
var rect = new Rect(10, 10, 100, 100);
mat[rect] = new Mat(rect.Width, rect.Width, MatType.CV_8UC3, Scalar.Red);
Cv2.ImShow("mat", mat);
Cv2.ImShow("partRef1", partRef1);
Cv2.ImShow("partRef2", partRef2);
Cv2.ImShow("deepCopyMat", deepCopyMat);
Cv2.ImShow("cloneMat", cloneMat);
Cv2.WaitKey();
Cv2.DestroyAllWindows();
}
效果截图:
标签:mat,读写,Cv2,OpenCV,图像,var,new,Mat From: https://www.cnblogs.com/harrychinese/p/17811012.html