链接处:
关于矩阵的通道与位深度的讲解:
OpenCV——图像的深度与通道数讲解 - 一抹烟霞 - 博客园
关于opencv中各种属性的理解:
Opencv Mat矩阵中data、size等属性的理解_daaizjh的博客-CSDN博客_mat size
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
int main()
{
cv::Mat MKG_1;
MKG_1 = cv::imread("001.png");
if (MKG_1.empty())
{
cout << "ERROR" << endl;
return -1;
}
cv::namedWindow("SHOW");
imshow("SHOW", MKG_1);
cv::waitKey(100);
/*.size 和.type的运用*/
cv::Mat MKG_2;
MKG_2 = cv::Mat(MKG_1.size(), MKG_1.type());
MKG_2 = cv::Scalar(127, 0, 0);
imshow("SHOW", MKG_2);
cv::waitKey(100);
cv::Mat MKG_3;
MKG_3 = MKG_1.clone();
cv::namedWindow("SHOW");
imshow("SHOW", MKG_3);
cv::waitKey(100);
/*
除了clone()函数,还可以用copyto函数【还是clone好用】
cv::Mat MKG_3;
MKG_2.copyTo(MKG_3);
不过,两者均是深拷贝,完全拷贝Mat对象
*/
/*读取第一行所含像素数量*/
const uchar* firstRow = MKG_1.ptr<uchar>(0);
printf("the number of the first col is %d" ,*firstRow);
int MKG_1_col = MKG_1.cols;
int MKG_1_row = MKG_1.rows;
printf("\n\n\n col = %d\n\n\n row = %d", MKG_1_col, MKG_1_row);
cv::Mat MrMKG_5(3,3,CV_8SC3,cv::Scalar(0,128,128)); //前两个参数是行数和列数,CV8SC3是通道数
imshow("OUTPUT", MrMKG_5); //与位深度x位+代表数据类型字母+'C'+通道数
cv::waitKey(2000); // cv::Scarlar(0,0,0)表示颜色
/*
Mat对象的复制分为部分复制和完全复制
部分复制只复制头和指针部分
完全复制字面意思
像 imread(xxx) 和 Mat A(B)是浅拷贝
深拷贝见上
*/
cv::Mat MKG_6;
MKG_6.create(3, 4, CV_8UC2);
MKG_6 = cv::Scalar(34,123);
cout << "M = " << MKG_6<<endl;
/*创建小数组*/
cv::Mat MKG_7;
MKG_7 = (cv::Mat_<double>(3, 3) << 0, -1, 0, 2, 3, 4, 1, 2, 2);
cout <<"the matrix is " << MKG_7 << endl;
cv::Mat MKG_8;
MKG_8 = cv::Mat::zeros(MKG_1.size(), MKG_1.type());
/*
cv术语小知识:
size是一个结构体,定义了Mat矩阵内数据的分布形式
depth用来度量每一个像素中每一个通道的精度,但它本身与图像的通道数无关,范围是1—6
dims是Mat矩阵的维度,若Mat是一个二维矩阵,则dims=2
data是uchar类型的指针,指向Mat数据矩阵的首地址。
elem是element(元素)的缩写,表示矩阵中每一个元素的数据大小,如果Mat中的数据类型是CV_8UC1,elem为1 elemSize==1
*/
cv::Mat MKG_9;
MKG_9 = cv::Mat::zeros(3, 3, CV_8UC1);
}