认识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类可以存储各种类型的数据,包括但不限于以下几种常见的数据类型:

  1. 整数类型(有符号和无符号):
    • 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位有符号整数

  2. 浮点数类型:
    • CV_32F:32位浮点数(单精度浮点数)

    • CV_64F:64位浮点数(双精度浮点数)

  3. 布尔类型:
    • 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());}

输出结果:

 

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

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

相关文章

element-table的动态操作,表格动态新增行、列,删除行列

灵活的自定义表格行列以及增删改查的操作,右键选中列则是列的删除&#xff0c;效果如下 <template><div class"st-table"><div style"width: 100%"><el-button click"addRow()" type"primary" icon"CircleP…

LeetCode(力扣)98. 验证二叉搜索树Python

LeetCode98. 验证二叉搜索树 题目链接代码 题目链接 https://leetcode.cn/problems/validate-binary-search-tree/ 代码 递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # …

package.json 详解

文章目录 package.json1. name2. version3. description4. homepage5. bugs6. license7. author, contributors8. funding9. files10. main11. module12. browser13. bin14. man15. directories15.1 directories.bin15.2 directories.man 16. repository17. scripts18. config1…

基于深度学习的图像风格迁移发展总结

前言 本文总结深度学习领域的图像风格迁移发展脉络。重点关注随着GAN、CUT、StyleGAN、CLIP、Diffusion Model 这些网络出现以来&#xff0c;图像风格迁移在其上的发展。本文注重这些网络对图像风格迁移任务的影响&#xff0c;以及背后的关键技术和研究&#xff0c;并总结出一…

java开发之fastjson

依赖 <!-- fastjson依赖 --> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> <…

述途路人团·百分之一的困

我开发的第2款Steam上的小游戏&#xff1a; 《述途路人团百分之一的困》&#xff08;英文名称&#xff1a;《As Talk As Walk Wayfarer Team – One Percent Sleepy》&#xff09; https://store.steampowered.com/app/2465530/_/ 电子邮件&#xff1a;atawwt_onepes163.com

算法通关村第5关【白银】| 哈希和栈经典算法题

1.两个栈实现队列 思路&#xff1a;两个栈&#xff0c;一个输入栈&#xff0c;一个输出栈。 当需要输入的时候就往inStack中插入&#xff0c;需要输出就往outStack中输出&#xff0c;当输出栈是空就倒出输入栈的数据到输出栈中&#xff0c;这样就保证了后插入的数据从栈顶倒入…

快速上手: Linux环境配置, 基本指令与项目部署要点

文章目录 1. Linux前置知识1.1. 什么是Linux1.2. Linux环境的搭建 2. Linux常用命令lscd pwdtouch cat more echo mkdirvi/vimrm cp mvgrep ps netstat 管道符yum相关Linux权限 3. 使用Linux部署Servlet项目3.1. 安装JDK3.2. 安装Tomcat3.3. 通过yum安装MariaDB3.4. 部署Servle…

陪诊小程序|陪诊软件开发功能|陪诊平台优势

随着人们生活水平的提高&#xff0c;对健康的关注度也在不断增加。尤其是在疫情过后&#xff0c;人们对自己和家人的健康问题更加重视。因此陪诊系统应运而生&#xff0c;为用户提供便捷、高效的陪诊陪护和跑腿服务。那么陪诊系统包含哪些功能呢&#xff1f; 首先&#xff0c;陪…

uni.uploadFile上传 PHP接收不到

开始这样&#xff0c;后端$file $request->file(file);接收不到 数据跑到param中去了 去掉Content-Type&#xff0c;就能接收到了 param只剩下

(视频教程)单细胞转录组多组差异基因分析及可视化函数

很久以前&#xff0c;我们发布过一个单细胞多组差异基因可视化的方法。跟着Cell学单细胞转录组分析(八):单细胞转录组差异基因分析及多组结果可视化。主要复现参考的是这篇发表在《Cell》上的文章。可以将多个组的差异结果展示出来。 &#xff08;reference&#xff1a;A Spati…

归并排序之从微观看递归

前言 这次&#xff0c;并不是具体讨论归并排序算法&#xff0c;而是利用归并排序算法&#xff0c;探讨一下递归。归并排序的特点在于连续使用了两次递归调用&#xff0c;这次我们将从微观上观察递归全过程&#xff0c;从本质上理解递归&#xff0c;如果能看完&#xff0c;你一…