opencv之Mat 类赋值的理解

来源:互联网 发布:nico sm是什么软件 编辑:程序博客网 时间:2024/05/20 18:55

今天看opencv技术手册中的Mat类:

看到这儿的时候出现了很大的疑惑:

Their headers are different, however, and
making a modification using any of them will affect all the other ones as well.

举个例子:

Mat   image;//定义一个Mat 类 的对象image

Mat   A;//定义一个Mat 类 的对象A

A=image;//将image赋值给A

现在如果修改A   那么image 里面的内容也会被修改.

经过实践验证,上面的说法是正确的。那么问题来了,如果你只想修改A而不想修改原始图像怎么办了?

经过实践验证,下面的代码是可行的:

Mat   image;//定义一个Mat 类 的对象image

Mat   A;//定义一个Mat 类 的对象A

A=image+0;//将image赋值给A

在赋值的时候后面加0就可以了。

下面是验证的整体程序:

// opencv_test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <iostream>#include <string>using namespace cv;using namespace std;int _tmain(int argc, _TCHAR* argv[]){string imageName("nnnbb.bmp"); // 赋值图像的名称//string imageName("baboon.jpg"); // by defaultif (argc > 1){imageName =(char)argv[1];}Mat image;image = imread(imageName.c_str(), CV_LOAD_IMAGE_UNCHANGED); // 将图像读入imageif (image.data==NULL)                      // 判断是否读入图像{cout << "Could not open or find the image" << std::endl;return -1;}Mat A = image;//将图像image 赋值给AA = A - 100;//改变A 通过输出窗口Display windowimage  和 Display windowA 观察image是否改变Mat C = A+0 ;//定义C  将A加0赋值给CC = C + 100;//改变C 通过输出窗口Display windowA  和 Display windowC 观察A是否改变//创建输出窗口namedWindow("Display windowimage", WND_PROP_AUTOSIZE); namedWindow("Display windowA", WND_PROP_AUTOSIZE);namedWindow("Display windowC", WND_PROP_AUTOSIZE);//显示图像imshow("Display windowimage", image);             imshow("Display windowA", A);imshow("Display windowC", C);waitKey(0); // 一直显示return 0;}
执行程序后的结果:




1 0
原创粉丝点击