(二)Mat类

构造函数

Mat m(3, 2, CV_8UC3, Scalar(0, 0, 255));
std::cout << m << std::endl;

创建一个行数为3,列数为2,图像元素是8位无符号整型,且有3个通道,图像所有像素值被初始化为(0,0,255)
opencv中默认的颜色顺序为BGR。使用cout输出上述m变量:
在这里插入图片描述
通过构造函数来创建Mat对象的方式有很多,可自行查看源代码。

matlab风格创建

Mat z = Mat::zeros(2, 3, CV_8UC1);
Mat z = Mat::ones(2, 3, CV_8UC1);
Mat z = Mat::eye(2, 3, CV_8UC1);

zeros和ones分别创建一个值为0,1的矩阵
eye创建一个单位矩阵。

对于单通道图像,矩阵的元素是基本数据类型,对于多通道图像,矩阵元素不再是一个值,可以用向量来表示:
例如8U类型的RGB彩色图像可以使用Vec3b,3通道float类型的矩阵可以使用Vec3f。

	Vec3b color;	//使用color变量来描述RGB颜色color[0] = 0;	//B分量color[1] = 0;	//G分量color[2] = 255;	//R分量

像素值读写

cv::Mat img = cv::imread("C:/Users/Administrator/Desktop/fapiao.jpg");
int channel = img.channels();
Vec3b value = img.at<Vec3b>(10, 20);
Vec3b tmp(255, 255, 255);
img.at<Vec3b>(10, 20)= tmp;

通过at函数可以读取和设置图片的像素值

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{cv::Mat img = cv::imread("C:/Users/Administrator/Desktop/fapiao.jpg");for (int i = 0; i < img.rows; i++){for (int j = 0; j < img.cols; j++){Vec3b pixel;pixel[0] = i % 255; //Bluepixel[1] = j % 255; //Greenpixel[2] = 0; //Redimg.at<Vec3b>(i, j) = pixel;}}cv::imshow("image", img);cv::waitKey(0);return 0;
}

遍历图像,不推荐使用at函数,该函数效率较低。

	for (MatIterator_<Vec3b> it = img.begin<Vec3b>(); it != img.end<Vec3b>(); it++){it[0] = 255;it[1] = 255;it[2] = 222;}

上述为通过迭代器进行遍历修改。

	for (int i = 0; i < img.rows; i++){//获取第 i 行首像素指针Vec3b* p = img.ptr<Vec3b>(i);for (int j = 0; j < img.cols; j++){p[j][0] = 222;//bp[j][1] = 222;//gp[j][2] = 222;//r}}

上述为通过指针对图片进行读取修改,该种方式效率较高

选取图像部分区域

Mat类提供了很多方法来选取图像的部分区域,需要注意的是,这些方法并不申请新的内存空间,而是与原对象共享内存空间,因此执行效率高。

Mat mat = Mat::eye(6, 6, CV_32S);
Mat matr = mat.row(1);
Mat matc = mat.col(2);

row或者col获取Mat的某一行或者某一列

Mat mat = Mat::eye(6, 6, CV_32S);
Mat matb = mat(Range::all(),Range(0,3));

使用range获取行或者列某个范围,Range::all()表示所有

Mat mat = Mat::eye(6, 6, CV_32S);
Mat mata =  mat.diag(1);

diag用于获取对角线元素
0:获取主对角线
大于0:主对角线下方元素
小于0:主对角线上方元素

Mat_

Mat_类继承自Mat类,可以用于简化Mat类读写像素值时每次都需要写模板类型。

Mat m = Mat::eye(3, 3, CV_8UC1);
Mat_<uchar> m_ = (Mat_<uchar>)m;
for (int i = 0; i < m.rows; i++)
{uchar* p = m_.ptr(i);for (int j = 0; j < m.cols; j++){double tmp = (i + j) % 255;m_(i, j) = tmp;}
}

Mat内存管理

mat类实际用于存放矩阵数据的是一个uchar类型的data指针,为了节约内存,data采用引用计数的方式进行管理,就类似于智能指针。
在这里插入图片描述

Mat a(100, 100, CV_8UC1);
Mat b = a;
Mat c = a(Rect(50, 60, 40, 40));

在这里插入图片描述
矩阵头存储Mat类基本信息,包括行数,列数,通道数等,上面abc三个mat对象有各自的矩阵头,但是共享矩阵数据内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第五十八周周报 FE-GNN

文章目录 week58 FE-GNN摘要Abstract一、大数据相关1. 完全分布式zookeeper2. 污水处理过程2.1 污水处理的基本方法2.2 污水处理基本工艺流程 二、文献阅读1. 题目2. Abstract3. 文献解读3.1 Introduce3.2 创新点 4. 网络框架4.1 特征子空间平坦化4.2 结构化主成分4.3 结论 5. …

OJ在线评测系统 前端创建题目(增) 更新题目(改) 题目列表(查) 以及做题页面的开发 基于VUECLI脚手架画界面

目录 前端创建页面的开发一 创建一个路由 用acro design写 前端创建页面的开发二 题目管理页面 搜索 最終效果 题目更新页面的开发 携带参数的那种 修改路由 页码更新细节 我们先处理菜单项的权限控制和权限隐藏 在这里改 属性绑定一个函数 可以参考聚合搜索项目…

Spring Boot项目连接Oracle数据库启动报错:Undefined Error

描述&#xff1a;远程拉下来的代码&#xff0c;配置了maven仓库后&#xff0c;未进行其他修改&#xff0c;自己本地启动报错。 报错现状&#xff1a; 解决&#xff1a;添加参数-Duser.nameuser后&#xff0c;启动成功。 原因分析&#xff1a; 分析一&#xff1a; maven仓…

第三节-类与对象(中)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类&#xff08;空类大小为1&#xff09;。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;…

【html网页制作】旅游风景主题网页制作含css动画及js特效(8页面附效果源码)

HTMLCSS旅游风景主题旅游网页制作 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果菜单切换效果PageA、整体页Page1、首页Page2、旅行趣事页Page3、旅行美景页Page4、旅行指南页Page5、旅行视频页Page6、留言页Page7、西湖简介…

论文阅读(十一):CBAM: Convolutional Block Attention Module

文章目录 1.Introduction2.Convolutional Block Attention ModuleExperimentsConclusion 论文题目&#xff1a;CBAM: Convolutional Block Attention Module&#xff08;CBAM&#xff1a;卷积注意力机制&#xff09;   论文链接&#xff1a;点击跳转   代码链接&#xff1a…

汽车3d动画渲染选择哪个?选择最佳云渲染解决方案

面临汽车3D动画渲染挑战&#xff1f;选择正确的云渲染服务至关重要。探索最佳解决方案&#xff0c;优化渲染效率&#xff0c;快速呈现逼真动画。 汽车3d动画渲染选择哪个&#xff1f; 对于汽车3D动画渲染&#xff0c;选择哪个渲染器取决于你的项目需求、预算和期望的效果。Ble…

Llama 3.1 技术研究报告-2

3.3 基础设施、扩展性和效率 我们描述了⽀持Llama 3 405B⼤规模预训练的硬件和基础设施&#xff0c;并讨论了⼏项优化措施&#xff0c;这些措施提⾼了训练效率。 3.3.1 训练基础设施 Llama 1和2模型在Meta的AI研究超级集群&#xff08;Lee和Sengupta&#xff0c;2022&#x…

探索存内计算的未来,高能效内存计算实训专场有感~

写在前面&#xff0c;首先感谢活动方&#xff1a;存内计算开发者社区的邀请来参加本次探索存内计算的未来&#xff0c;高能效内存计算实训专场。下面我给大家分享一下本次的活动实操感受&#x1f600;。 活动议程 本次活动邀请存内技术专家李阳老师分享存内计算是什么&#xf…

Subdominator:一款针对漏洞奖励计划的子域名安全枚举工具

关于Subdominator Subdominator是一款针对漏洞奖励计划的子域名安全枚举工具&#xff0c;可用于在漏洞搜寻和侦察过程中进行被动子域名枚举。它旨在通过高效枚举子域名和各种免费被动资源来帮助研究人员和网络安全专业人员发现潜在的安全漏洞。 Subdominator 与各种免费和付费…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-24

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-24 1. Enriching Datasets with Demographics through Large Language Models: What’s in a Name? K AlNuaimi, G Marti, M Ravaut, A AlKetbi, A Henschel… - arXiv preprint arXiv …, 2024 通过大型语言…

python获取百度地图路径规划

自制语音助手想做一个查询交通路线的功能&#xff0c;于是就想到了百度地图。在百度地图的服务器端应用中&#xff0c;提供了“轻量级路线规划”API接口&#xff0c;正好可以满足需求。要用这个接口&#xff0c;需要注册百度地图账号并创建一个服务器端的应用。有关开通百度地图…

Docekrfile和docker compose编写指南及注意事项

Dockerfile 基础语法 我们通过编写dockerfile,将每一层要做的事情使用语法固定下来&#xff0c;之后运行指令就可以通过docker来制作自己的镜像了。 构建镜像的指令&#xff1a;docker build /path -t imageName:tag 注意&#xff0c;docker build后的path必须是dockerfile…

Selenium与数据库结合:数据爬取与存储的技术实践

目录 一、Selenium与数据库结合的基础概念 1.1 Selenium简介 1.2 数据库简介 1.3 Selenium与数据库结合的优势 二、Selenium爬取数据的基本步骤 2.1 环境准备 2.2 编写爬虫代码 2.3 数据提取 2.4 异常处理 三、数据存储到数据库 3.1 数据库连接 3.2 数据存储 3.3 …

网络编程(10)——json序列化

十、day10 今天学习如何使用jsoncpp将json数据解析为c对象&#xff0c;将c对象序列化为json数据。jsoncp经常在网络通信中使用&#xff0c;也就是服务器和客户端的通信一般使用json&#xff08;可视化好&#xff09;&#xff1b;而protobuf一般在服务器之间的通信中使用 json…

【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差

本文内容来自YashanDB官网&#xff0c;具体内容请见https://www.yashandb.com/newsinfo/7396959.html?templateId1718516 问题现象 yashandb执行带oracle dblink表的sql性能差&#xff1a; 同样的语句&#xff0c;同样的数据&#xff0c;oracle通过dblink访问远端oracle执行…

可视化服务编排:jvs-logic API出参加密实战教程

在现代软件开发与系统集成的过程中&#xff0c;API&#xff08;应用程序接口&#xff09;非常重要&#xff0c;它能使不同系统之间连接&#xff0c;进行数据交换和功能调用。当然&#xff0c;数据交换的数据安全肯定是不可忽视的&#xff0c;为了确保数据在传输过程中的保密性和…

虫情测报灯的工作原理

TH-CQ3】果园、森林等区域病虫害的实时监测、预警和科学管理。病虫害监测系统通常由以下几个部分组成&#xff1a;包括图像传感器、声音传感器、气象传感器等&#xff0c;用于实时采集作物及其周围环境的数据&#xff0c;如叶片变化、虫鸣声、温度、湿度、光照等。对采集到的数…

基于RealSense D435相机实现手部姿态重定向

基于Intel RealSense D435相机和MediaPipe的手部姿态检测&#xff0c;进一步简单实现手部姿态与机器人末端的重定向&#xff0c;获取手部的6D坐标&#xff08;包括位置和姿态&#xff09;。 假设已经按照【基于 RealSenseD435i相机实现手部姿态检测】配置好所需的库和环境&…

海口网站建设的最佳实践

海口网站建设的最佳实践 随着互联网的迅猛发展&#xff0c;海口的企业和个人越来越重视网站建设。一个高质量的网站不仅能提升企业形象&#xff0c;还能有效促进品牌传播和业务发展。以下是海口网站建设的一些最佳实践&#xff0c;希望能为相关从业者提供帮助。 1. 明确目标和…