【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); }
分析:利用第二种方法不会对原图进行改变的原因是因为进行了拷贝,而不是引用。
相关文章推荐
- OpenCV2.4.4中利用直方图均衡化增强图像对比度(Mat结构实现)
- OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- 【OpenCV笔记 04】OpenCV中显式创建Mat对象的5种方法
- opencv里面Mat元素数据的深度和通道的理解
- 【opencv】 图像的创建,读取,显示 IplImage,Mat类型转化
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- openCV 利用Mat 类读入并显示图像
- [转]OpenCv2 学习笔记(1) Mat创建、复制、释放
- opencv中如何利用mat来获取连续内存的图像区域,并改变形状
- OpenCV2.4.4中利用直方图均衡化增强图像对比度(Mat结构实现)
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- java中利用类名生成Class对象,通过class对象创建实体类的理解
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- 如何利用opencv创建图像列表
- MFC中利用Opencv与C++抓取摄像头进行人脸识别(Mat)
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- 利用SIFT和RANSAC算法(openCV框架)实现物体的检测与定位,并求出变换矩阵(findFundamentalMat和findHomography的比较)