目录
1.什么是Mat类
2.Mat类能存储的数据
整数类型(有符号和无符号):
浮点数类型:
布尔类型:
3.Mat类的创建
1.利用矩阵宽、高和类型参数创建Mat类
2.利用矩陈Size(结构和数据类型参数创建Mat类
3.利用已有Mat类创建新的Mat类
4.Mat类的赋值
1.创建时赋值
2.类方法赋值
3.枚举法赋值
5. Android jni demo
Mat类是OpenCV中的一个类,用于存储矩阵数据的类型,与int、double等相同。
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图像)
cv::Mat mat( int rows,int cols,int type)
构造矩阵的行数rows:
cols:矩阵的列数
type: 矩阵中存储的数据类型。此处除了CV 8UC1、CV 64FC4等从1到4通道以外,还提供了更多通道的参数,通过CV 8UC(n)中的n来构建多通道矩阵,其中n最大可以取到512。
cv::Mat mat( Size size,int type)
size: 2D数组变量尺寸,通过Size(cols,rows)进行赋值
type:与前面一致
cv::Mat mat( const Mat &m,
const Range & rowRange,
const Range & colRange = Range: :al1()
)
cv::Mat mat( int rows,
int cols,
int type,
const Scalar & s
)
cv::Mat a(Mat_
(3,3)<<1,2, 3, 4, 5, 6, 7,8, 9); cv::Mat b = (Mat_
(2, 3) << 1.0, 2.1, 3.2, 4.0, 5.1, 6.2);
#include
#include
#include
#include
#include
#include
#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_(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(i, j);
// 构建输出字符串
ss << static_cast(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(i, j);
// 构建输出字符串
ss << static_cast(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(i, j);
// 构建输出字符串
ss << static_cast(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(i, j);
// 构建输出字符串
ss <(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(i, j);
// 构建输出字符串
ss <
输出结果: