• OpenCV中Mat对象及其创建


    opencv中,Mat用来存储图像的数据结构。由两部分构成:

    矩阵头:包含矩阵尺寸、存储方法和存储地址等信息
    指针:一个指向存储所有像素值的矩阵的指针

    在这里插入图片描述
    002程序:

    #include
    #include
    
    using namespace cv;
    using namespace std;
    
    int main(int argc, char** argv) {
    	Mat src = imread("D:/VC2017_WORKSPACE/Images/dog.jpg", IMREAD_COLOR);
    	if (src.empty()) {
    		printf("could not find image file");
    		return -1;
    	}
    	namedWindow("demo-002", WINDOW_NORMAL);
    	imshow("demo-002", src);
    	//imwrite("D:/VC2017_WORKSPACE/Images/Imwrite/testone.png",src);
    	waitKey(0);
    	destroyAllWindows();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    显示:
    在这里插入图片描述
    在上述程序基础上,增加获取图像信息并打印:

    //获取图像的宽度、高度、通道数
    int width = src.cols;
    int height = src.rows;
    int dim = src.channels();
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    转为灰度后:
    在这里插入图片描述

    Mat对象的创建图像
    • 创建空白Mat对象
    • 创建填充值的Mat对象
    • 创建单通道与多通道Mat对象
    • 创建与原图大小和类型相同的Mat对象
    Mat grayBack = Mat(256, 256, CV_8UC1);//创建一个256*256大小的单通道图像
    grayBack = Scalar(0);//将创建的单通道图像变成黑色
    imshow("grayBack", grayBack);
    //方法一:
    Mat colorBack = Mat(256, 256, CV_8UC3);//创建一个256*256大小的三通道图像
    colorBack = Scalar(0, 0, 255);//将创建的三通道图像变成红色
    imshow("colorBack", colorBack);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    显示结果:
    在这里插入图片描述

    //方法二:
    Mat colorBack1 = Mat(Size(512, 512), CV_8UC3);//创建一个512*512大小的三通道图像
    colorBack1 = Scalar(255, 0, 255);//改变创建的三通道图像颜色
    imshow("colorBack1", colorBack1);
    
    • 1
    • 2
    • 3
    • 4

    显示结果:
    在这里插入图片描述

    Mat colorBack2 = Mat::zeros(Size(256, 256), CV_8UC3);//直接创建一个256*256大小的三通道图像(黑色)
    imshow("colorBack2", colorBack2);
    
    • 1
    • 2

    显示结果:
    在这里插入图片描述

    Mat backGround = Mat::zeros(src.size(), src.type());//创建一个与原图大小、类型相同的黑色背景图像
    imshow("backGround", backGround);
    
    • 1
    • 2

    在这里插入图片描述

    注意赋值和克隆、拷贝的区别:

    Mat t1 = src;//赋值,改变t1后,src也会改变
    Mat t2 = src.clone();//克隆,改变t2后,src不变
    Mat t3;
    src.copyTo(t3);//拷贝,改变t3后,src不变
    
    • 1
    • 2
    • 3
    • 4

    一个工程下包含多个项目的方法:

    在这里插入图片描述
    上图已有两个项目,现在此基础上继续新建。方法:选中解决方案->右键->添加->新建项目。名称和路径修改,确定。
    在这里插入图片描述
    选择空项目,确定。
    在这里插入图片描述
    在这里插入图片描述
    然后,分别右键点击源文件–>添加–>新建项,添加cpp源文件
    在这里插入图片描述
    cpp源文件添加成功
    在这里插入图片描述
    在opencv4_002.cpp中编写完成程序后,要想运行,需将其设为启动项目(否则会继续运行opencv4_001.cpp)
    在这里插入图片描述
    重新生成解决方案,然后运行程序,执行的才是002的结果
    在这里插入图片描述

  • 相关阅读:
    CODING DevOps 助力中化信息打造新一代研效平台,驱动“线上中化”新未来
    new/delete 和malloc/free的区别
    基于微服务、Java、Springcloud、Vue、MySQL开发的智慧工地管理系统源码
    【历史上的今天】7 月 31 日:“缸中之脑”的提出者诞生;Wi-Fi 之父出生;USB 3.1 标准发布
    前端知识案例102-javascript基础语法-捕获异常
    Java Math.sqrt()具有什么功能呢?
    SpringBoot 打包发布
    探索 C++20 的新领域:深入理解 static关键字和核心语言特性测试宏
    Vue-加载流程&&DIFF算法
    【积累】机器学习知识
  • 原文地址:https://blog.csdn.net/weixin_45646929/article/details/126689953