您的位置:首页 > 运维架构

【opencv】对利用Mat创建指向的理解

2018-03-05 16:20 429 查看
Mat tem(Size(3,4),CV_8UC1,Scalar(0));
Mat img=imread("XXXXX");


在opencv3.0中,如上利用Mat类来初始化一张图片或矩阵等,实际创建了指向矩阵或图片内存空间的引用即指针。

例1

void change(Mat img)
{
img.at<uchar>(2, 0) = 1;
cout << (int)img.at<uchar>(2, 0) << endl;
}
int main()
{
Mat tem(Size(3,4),CV_8UC1,Scalar(0));
cout << (int)tem.at<uchar>(2, 0) << endl;
change(tem);
cout <<(int)tem.at<uchar>(2, 0) << endl;
system("pause");
}


结果:

0

1

1

分析:change函数形参为Mat img,在主函数内传入指向矩阵的tem,则在change函数内通过img对于矩阵数据的修改是落实到实际内存的修改,即第三次显示出的数字是1。

例2

int main()
{//探究利用Mat(Rect())截取图片,在截取图片上进行改动原图是否会发生变化
Mat img = imread("C:\\Users\\Administrator\\Desktop\\NOTE\\实验图片\\test.png");
Rect b(0, 0, 70, 80);
Mat roi;
//1.会出现改动
//roi = img(b);
//2.不会出现改动
img(b).copyTo(roi);

circle(roi,Point(20,30),10,Scalar(255,0,0),1,8);
imshow("roi",roi);
imshow("img", img);
waitKey(0);

}


分析:利用第二种方法不会对原图进行改变的原因是因为进行了拷贝,而不是引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv
相关文章推荐