opencv之Mat 类赋值的理解

本文介绍在使用OpenCV进行图像处理时如何避免修改原始图像数据。通过具体实例展示了当复制Mat类对象时,如何正确地进行深拷贝以确保原始数据不被更改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看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 default
	if (argc > 1)
	{
		imageName =(char)argv[1];
	}
	Mat image;
	image = imread(imageName.c_str(), CV_LOAD_IMAGE_UNCHANGED); // 将图像读入image
	if (image.data==NULL)                      // 判断是否读入图像
	{
		cout << "Could not open or find the image" << std::endl;
		return -1;
	}
	Mat A = image;//将图像image 赋值给A
	A = A - 100;//改变A 通过输出窗口Display windowimage  和 Display windowA 观察image是否改变
	Mat C = A+0 ;//定义C  将A加0赋值给C
	C = 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;
}


执行程序后的结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theboynoName

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值