1. opencv的Mat矩阵
Mat是opencv在C++中的一个图像容器类,可以使用Mat进行图像矩阵的定义
Mat矩阵的定义
#include<iostream> #include<opencv2/opencv.hpp> // 定义图像矩阵 cv::Mat image(cv::Size(row, col), CV_8UC1) // 单通道图像,存放uchar cv::Mat image = cv::Mat(cv::Size(row, col), CV_8UC3) // 三通道图像,存放Vec3b类型 // 特殊矩阵定义 cv::Mat zeros = cv::Mat::zeros(cv::Size(row, col), CV_8UC1) // 全0 cv::Mat zeros = cv::Mat::zeros(h,w,CV_8UC1) cv::Mat ones = cv::Mat::ones(cv::Size(row, col), CV_8UC1) // 全1 cv::Mat ones = cv::Mat::ones(h,w,CV_8UC1) cv::Mat eyes = cv::Mat::eyes(cv::Size(row, col), CV_32FC1) // 对角线全1 cv::Mat eyes = cv::Mat::eyes(h,w,CV_32FC1)
opencv中的坐标系左上角为(0, 0),向左下方向,Mat矩阵是按照(row, col)进行排布的,即(y, x)
单通道灰度图数据存放格式
多通道图像的数据存放格式
opencv中三通道图像的存储是以二维矩阵的形式实现的,即rows * (channel * cols )
Mat矩阵的访问
Mat矩阵不能像python中直接用 [ ]进行访问,有多种访问方式,这里使用at进行访问,先y后x(先行后列)
// 单通道图像的访问 uchar pixel = image.at<uchar>(row, col); // 单通道图像是以uchar形式存储的,输入需要int(pixel) uchar pixel = image.at<uchar>(Point(x, y)); // 三通道图像的访问 Vec3b pixels = image.at<Vec3b>(row, col); // 三通道图像是以Vec3b形式存储的 uchar bp = image.at<uchar>(row, col)[0]; // 蓝色通道,单通道还是uchar
uchar gp = image.at<uchar>(row, col)[1]; // 绿色通道
uchar rp = image.at<uchar>(row, col)[2]; // 红色通道
Mat的拷贝使用 image.clone()
标签:Mat,image,C++,col,openCV,CV,相关,cv,row From: https://www.cnblogs.com/Liang-ml/p/16792667.html