OpenCV(二):认识Mat容器
目录
1.什么是Mat类
2.Mat类能存储的数据
整数类型(有符号和无符号):
浮点数类型:
布尔类型:
3.Mat类的创建
1.利用矩阵宽、高和类型参数创建Mat类
2.利用矩陈Size(结构和数据类型参数创建Mat类
3.利用已有Mat类创建新的Mat类
4.Mat类的赋值
1.创建时赋值
2.类方法赋值
3.枚举法赋值
5. Android jni demo
1.什么是Mat类
Mat类是OpenCV中的一个类,用于存储矩阵数据的类型,与int、double等相同。

2.Mat类能存储的数据
Mat类可以存储各种类型的数据,包括但不限于以下几种常见的数据类型:
-
整数类型(有符号和无符号):
-
CV_8U:8位无符号整数(范围从0到255)
-
CV_8S:8位有符号整数(范围从-128到127)
-
CV_16U:16位无符号整数(范围从0到65535)
-
CV_16S:16位有符号整数(范围从-32768到32767)
-
CV_32S:32位有符号整数
-
CV_64S:64位有符号整数
-
-
浮点数类型:
-
CV_32F:32位浮点数(单精度浮点数)
-
CV_64F:64位浮点数(双精度浮点数)
-
-
布尔类型:
-
CV_8UC1:8位无符号整数,表示二值图像(黑白图像)
-
CV_8UC3:8位无符号整数,表示彩色图像(三通道RGB图像)
-
3.Mat类的创建
1.利用矩阵宽、高和类型参数创建Mat类
cv::Mat mat( int rows,int cols,int type)
-
构造矩阵的行数rows:
-
cols:矩阵的列数
-
type: 矩阵中存储的数据类型。此处除了CV 8UC1、CV 64FC4等从1到4通道以外,还提供了更多通道的参数,通过CV 8UC(n)中的n来构建多通道矩阵,其中n最大可以取到512。
2.利用矩陈Size(结构和数据类型参数创建Mat类
cv::Mat mat( Size size,int type)
-
size: 2D数组变量尺寸,通过Size(cols,rows)进行赋值
-
type:与前面一致
3.利用已有Mat类创建新的Mat类
cv::Mat mat( const Mat &m,
const Range & rowRange,
const Range & colRange = Range: :al1()
)
- m:已经构建完成的Mat类矩阵数据。
- rowRange:在已有矩阵中需要截取的行数范围,是个Range变量,例如从第2行到第5行可以表示为Range(2,5)。
- colRange: 在已有矩阵中需要截取的列数范围,是一个Range变量,例如从第2列到第5列可以表示为
- Range(2,5),当不输入任何值时表示所有列都会被截取。
4.Mat类的赋值
1.创建时赋值
cv::Mat mat( int rows,
int cols,
int type,
const Scalar & s
)
- 矩阵的行数rows:
- 矩阵的列数cols:
- type:存储数据的类型
- s:给矩阵中每个像素赋值的参数变量,例如Scalar(0,0,255)。
2.类方法赋值
- eye:单位矩阵
- diag:对角矩阵
- 元素全为1的矩阵ones:
- zeros:元素全为0的矩阵
3.枚举法赋值
cv::Mat a(Mat_<int>(3,3)<<1,2, 3, 4, 5, 6, 7,8, 9);
cv::Mat b = (Mat_<double>(2, 3) << 1.0, 2.1, 3.2, 4.0, 5.1, 6.2);
5. Android jni demo
#include <jni.h>
#include <string>
#include <android/bitmap.h>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <android/log.h>
#define LOG_TAG "xxx"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)using namespace cv;
using namespace std;extern "C"
JNIEXPORT void JNICALL
Java_com_example_myapplication_MainActivity_test(JNIEnv *env, jclass clazz) {Mat a(3,3,CV_8UC1);Mat b(Size(3,3),CV_8UC1);Mat c0(5,5,CV_8UC1,Scalar(4,5,6));Mat c1(5,5,CV_8UC2,Scalar(4,5,6));Mat c2(5,5,CV_8UC3,Scalar(4,5,6));Mat d = (Mat_<int>(1, 5) << 1, 2, 3, 4, 5);Mat e=Mat::diag(d);//类方法赋值,对角矩阵Mat f=Mat(e,Range(2,4),Range(2,4));ostringstream ss;ss << "c0 data:" << std::endl;// 遍历并输出像素值for (int i = 0; i < c0.rows; i++) {for (int j = 0; j < c0.cols*c0.channels(); j++) {// 获取像素值uchar value = c0.at<uchar>(i, j);// 构建输出字符串ss << static_cast<int>(value) << " ";}ss << std::endl;}ss << "c1 data:" << std::endl;// 遍历并输出像素值for (int i = 0; i < c1.rows; i++) {for (int j = 0; j < c1.cols*c1.channels(); j++) {// 获取像素值uchar value = c1.at<uchar>(i, j);// 构建输出字符串ss << static_cast<int>(value) << " ";}ss << std::endl;}ss << "c2 data:" << std::endl;// 遍历并输出像素值for (int i = 0; i < c2.rows; i++) {for (int j = 0; j < c2.cols*c2.channels(); j++) {// 获取像素值uchar value = c2.at<uchar>(i, j);// 构建输出字符串ss << static_cast<int>(value) << " ";}ss << std::endl;}ss << "d data:" << std::endl;// 遍历并输出像素值for (int i = 0; i < d.rows; i++) {for (int j = 0; j < d.cols; j++) {// 获取像素值int value = d.at<int>(i, j);// 构建输出字符串ss <<value << " ";}ss << std::endl;}ss << "e data:" << std::endl;// 遍历并输出像素值for (int i = 0; i < e.rows; i++) {for (int j = 0; j < e.cols*e.channels(); j++) {// 获取像素值int value = e.at<int>(i, j);// 构建输出字符串ss << value << " ";}ss << std::endl;}ss << "f data:" << std::endl;// 遍历并输出像素值for (int i = 0; i < f.rows; i++) {for (int j = 0; j < f.cols*f.channels(); j++) {// 获取像素值int value = f.at<int>(i, j);// 构建输出字符串ss <<value << " ";}ss << std::endl;}// 使用LOG输出到LogcatLOGD("%s", ss.str().c_str());}
输出结果:

相关文章:
OpenCV(二):认识Mat容器
目录 1.什么是Mat类 2.Mat类能存储的数据 整数类型(有符号和无符号): 浮点数类型: 布尔类型: 3.Mat类的创建 1.利用矩阵宽、高和类型参数创建Mat类 2.利用矩陈Size(结构和数据类型参数创建Mat类 3.利用已有Mat…...
springboot整合Excel填充数据
填充一组数据 准备模板 封装数据 import java.util.ArrayList; import java.util.List;/*** 使用实体类封装填充数据** 实体中成员变量名称需要和Excel表各种{}包裹的变量名匹配*/ Data public class FillData {private String name;private int age;// 生成多组数据代码pub…...
c语言技术面试记录 ---- 纲要、题目、分析及给分标准
纲要 作为一个面试官,除了编程类的问题,你还可以考虑问一些关于技术知识、项目经验、解决问题能力和团队合作等方面的问题,以全面评估应聘者的能力和适应性。以下是一个可能的提问逻辑和大纲,供你参考: 技术知识和基…...
前端进阶之——模块化
在做项目的时候越来越发现模块化的重要性,做好模块化开发不仅给后期的维护带来不少好处而且大大提升项目开发效率,接下来整理一下模块化相关知识吧。 模块化开发的优点 封装方法、提高代码的复用性、可维护性和可读性隔离作用域,避免污染全…...
Python爬虫抓取表情包制作个性化聊天机器人
在现代社交媒体和即时通讯应用中,使用表情包已经成为一种流行的沟通方。本文将介绍如何利用Python编写一个简单而有趣的聊天机器人,并通过爬虫技术来抓取各类表情包,使其具备个性化特点。 1.确定需求与功能 -定义聊天机器人需要实现哪…...
使用pip命令安装库,装到其他环境中的问题。
问题描述:我们在pycharm中创建了新的虚拟环境,但是在其终端使用Pip命令安装库时,发现库却安装到了其他conda创建的环境中。图示安装gym库,刚开始安装到了其他地方,第二次正确安装。 原因分析:安装库时&…...
如何使用CSS实现一个带有动画效果的进度条?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTML 结构:⭐ CSS 样式:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那…...
uni-app 报错 navigateTo:fail page “/pages/.../...“ is not found
这个错误的意思是:识别不到该页面 错误可能一:没有在 pages.json【微信小程序是 app.json】中定义该页面的路径 如: pages.json "pages": [{"path": "pages/index/index" }, {"path": "pag…...
【unity插件】使用BehaviorDesigner插件制作BOSS的AI行为树
文章目录 前言素材插件一、基础使用二、敌人物理攻击三、敌人面向玩家四、敌人法术攻击五、随机进行攻击六、敌人不同的阶段推荐学习视频源码完结 前言 Behavior Designer是一个行为树插件,是一款为了让策划,程序员,美术人员方便使用的可视化…...
概念解析 | 量子机器学习:将量子力学与人工智能的奇妙融合
注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:量子机器学习。 量子机器学习:将量子力学与人工智能的奇妙融合 量子增强机器学习:量子经典混合卷积神经网络 量子机器学习是量子计算和机器学习的结合,它利用量子力学的特…...
【Cortex-M3权威指南】学习笔记4 - 异常
目录 实现 CM3流水线CM3 详细框图CM3 总线接口总线连接模板 异常异常类型优先级定义优先级组 向量表中断输入于挂起NMI中断挂起 Fault 类异常总线 faults存储器管理 faults用法 faults SVC 与 PendSV 实现 CM3 流水线 CM3 处理器使用 3 级流水线,分别是:…...
RISC-V(2)——特权级及特权指令集
目录 1. 特权级 2. 控制和状态寄存器(CSR) 2.1 分类 2.2 分析 1. 特权级 一个 RISC-V 硬件线程(hart)是运行在某个特权级上的,这个特权级被编码到一个或者多个 CSR(control and status register&a…...
Linux——常用命令大汇总(带你快速入门Linux)
纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 💬文章目录 一.终端和shell命令解析器终端和shell命令解析器概述终端提示符的格式常用快捷键 二.Linux命令格式帮助文档:man 三.目录基础知识Wind…...
记录 使用 git 克隆仓库报错:Warning: Permanently added‘github.com’ to the .....(ssh )
解决方法: 1. 新建空文件夹->右键->点击 Git Bash Here2. 输入 cd C:3. 输入 cat ~/.ssh/id_rsa.pub4. 输入 ssh-keygen重复回车,生成一个矩形,则说明公钥已经生成了。重复步骤3,生成publickey,右键…...
kafka---- zookeeper集群搭建
1.准备工作: ##准备3个节点,要求配置好主机名称,服务器之间系统时间保持一致 ##注意/etc/hostname 和/etc/hosts 配置主机名称(在这个里我准备Prac-zk-133, Prac-zk-134 , Prac-zk-135二节点) vim /etc/hosts #保证可以通过主机名互通 添加格式为IP 主…...
linux安装firefox
1.下载对应包 https://www.mozilla.org/en-US/firefox/all/#product-desktop-release 2. 挂载桌面链接(如果/usr/bin/firefox下有的话,先删除) ln -s /opt/firefox/firefox /usr/bin/firefox 3.执行以下命令,即可启动Firefox客户端: firefox...
【MySQL】基础语法总结
MySQL 基础语句 一、DDL 数据库定义语言 1.1CREATE 创建 1.1.1 创建数据库 语法结构 CREATE DATABASE database_name;示例 CREATE DATABASE demo;1.1.2 创建表 语法结构 CREATE TABLE 表名 (列1 数据类型,列2 数据类型,... );示例 CREATE TABLE new_user (id INT PRIMARY KE…...
【玩玩Vue】使用el-menu作为菜单时,通过一二级路由控制菜单高亮
原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、Vue路由二、路由一级控制高亮(常用)1.vue中路由文件2.网址样式3.Vue文件4.$route的内容 三、路由二级控制高亮…...
9.2 【C语言】使用结构体数组
一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据),如果有10个学生需要参加运算,显然应该用数组,这就是结构体数组。 9.2.1 定义结构体数组 例9.3 有三个候选人,每个选民只…...
leetcode原题: 最小值、最大数字
题目1:最小值 给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出:3&…...
Qwen3.5-2B入门指南:如何将本地7860服务映射为公网可访问API接口
Qwen3.5-2B入门指南:如何将本地7860服务映射为公网可访问API接口 1. 引言 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型主打低功耗、低门槛部署,特别适合在端侧和…...
深入解析RevokeMsgPatcher:Windows平台防撤回补丁的技术实现与架构设计
深入解析RevokeMsgPatcher:Windows平台防撤回补丁的技术实现与架构设计 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: ht…...
go-zero v1.10.1 更新解析:JSON5 配置正式支持 Redis 通用命令 Do DoCtx 上线 Go 1.24 升级与 core/codec 关键安全修复全梳理
一、版本总览:go-zero v1.10.1,微服务框架的又一次关键迭代 2026年3月28日,国产高性能Go微服务框架go-zero正式发布v1.10.1版本。作为一次补丁式更新,该版本并非简单的问题修复,而是集新功能拓展、核心安全加固、底层依…...
Qwen3-Reranker-8B开源大模型:支持HuggingFace Transformers原生加载
Qwen3-Reranker-8B开源大模型:支持HuggingFace Transformers原生加载 如果你正在构建一个智能搜索系统、问答机器人或者文档分析工具,那么“重排序”这个环节你一定不陌生。简单来说,它就像一个智能裁判,当你的检索系统从海量文档…...
告别AI对话失忆症:深入LangChain4j的ChatMemoryProvider与InMemoryChatMemoryStore
深入LangChain4j记忆管理:构建高性能会话隔离系统的实践指南 在构建企业级AI对话系统时,会话记忆管理往往成为决定用户体验的关键因素。想象这样一个场景:当用户询问"我上周提到的项目进展如何?"时,系统能否…...
告别模糊边界!用Monodepth2实战KITTI深度估计,详解自动掩码与最小重投影损失
告别模糊边界!用Monodepth2实战KITTI深度估计,详解自动掩码与最小重投影损失 深度估计是计算机视觉领域的一项基础任务,它试图从2D图像中恢复出3D场景的几何信息。在自动驾驶、机器人导航、增强现实等应用中,准确的深度感知至关重…...
视频防抖新范式:从陀螺仪数据到稳定画面的技术革命——影像创作者的开源解决方案
视频防抖新范式:从陀螺仪数据到稳定画面的技术革命——影像创作者的开源解决方案 【免费下载链接】gyroflow Video stabilization using gyroscope data 项目地址: https://gitcode.com/GitHub_Trending/gy/gyroflow 一、技术原理解析:GyroFlow如…...
实体店有没有必要做门店小程序?
在当前消费行为不断向线上延伸的背景下,实体店是否需要搭建门店小程序,已经成为很多经营者在数字化转型过程中必须面对的问题。实体店是否有必要做门店小程序,取决于其是否需要提升获客能力与用户复购效率。一、为什么会出现这个问题在实际经…...
Performance-Fish:环世界性能优化的全方位解决方案
Performance-Fish:环世界性能优化的全方位解决方案 【免费下载链接】Performance-Fish Performance Mod for RimWorld 项目地址: https://gitcode.com/gh_mirrors/pe/Performance-Fish 问题诊断:环世界性能瓶颈深度剖析 🔍 AI决策系统…...
IP被封禁?5招快速恢复访问权限
使用网站或平台时,如果你突然遇到“Your IP has been banned(您的IP已被封禁)”的提示,通常意味着该平台已经限制了你当前网络的访问权限。很多人第一反应是账号出问题,但实际上,IP封禁针对的是网络环境&am…...
