一 学习内容
1 Mat的使用。
二 代码
#include
#include
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src;
src = imread("E:/2 OpenCV_Projects_ZL/NeZha.jpg");
if (src.empty()) {
cout << "Could not load ..." << endl;
return -1;
}
namedWindow("Figure1", CV_WINDOW_AUTOSIZE);
imshow("Figure1", src);
// 开始新内容学习
// 1 创建一个背景图像
Mat dst;
dst= Mat(src.size(),src.type());
dst = Scalar(255, 0, 255);
namedWindow("Figure2", CV_WINDOW_AUTOSIZE);
imshow("Figure2", dst);
// 2 克隆一个与src一样的Mat
Mat dst1 = src.clone();
namedWindow("Figure3", CV_WINDOW_AUTOSIZE);
imshow("Figure3", dst1);
// 3 复值一个与src一样的Mat
Mat dst2;
src.copyTo(dst2);
namedWindow("Figure4", CV_WINDOW_AUTOSIZE);
imshow("Figure4", dst2);
// 4 查看通道数
Mat dst3;
cvtColor(src, dst3, CV_BGR2GRAY);
namedWindow("Figure5", CV_WINDOW_AUTOSIZE);
imshow("Figure5", dst3);
printf("src的通道数为:%d\n",src.channels());
printf("dst3的通道数为:%d\n", dst3.channels());
//5 获取单通道图像的指针
const uchar* firstRow = dst3.ptr(0);
printf("第一个元素的灰度值为:%d\n", *firstRow);//指针前面加上*表示获取指针处存放的值
/*
//6 获取单通道图像的指针
Mat dst4,dst5;
dst4 = Mat(src.size(), src.type());
dst4 = Scalar(175, 0, 175);
cvtColor(dst4, dst5, CV_BGR2GRAY);
namedWindow("Figure6", CV_WINDOW_AUTOSIZE);
imshow("Figure6", dst5);
const uchar* firstRow = dst5.ptr(0);
printf("第一个元素的灰度值为:%d\n", *firstRow);//指针前面加上*表示获取指针处存放的值
*/
// 7 获取原图像与灰度图像的列数和行数
int cols = src.cols;
int rows = src.rows;
int cols_dst3 = dst3.cols;
int rows_dst3 = dst3.rows;
printf("src的列数和行数为:%d和%d\n", cols, rows);//400*224
printf("dst3的列数和行数为:%d和%d\n", cols_dst3, rows_dst3);//400*224
// 8 制作一个3*3的图像方块
Mat M(3, 3, CV_8UC3, Scalar(0, 0, 255));//类型CV_8UC3表示:8位无符号的数,且具有3个通道
//Scalar(0, 0, 255)是一个向量,用来指定像素值;向量长度与通道数匹配
cout << 'M=' << endl << M << endl;
namedWindow("Figure7", CV_WINDOW_AUTOSIZE);
imshow("Figure7", M);
int cols_M = M.cols;
int rows_M = M.rows;
printf("M的通道数为:%d\n", M.channels());// 3
printf("M的列数和行数为:%d和%d\n", cols_M, rows_M);// 3和3
// 9 创建一个图像
Mat dst6;
dst6.create(src.size(),src.type());
dst6 = Scalar(0,0,255);
namedWindow("Figure8", CV_WINDOW_AUTOSIZE);
imshow("Figure8", dst6);
// 10 定一个掩膜kernel
Mat kernel = (Mat_(3, 3) << 0,-1,0, -1, 5, -1, 0, -1, 0);
cout << 'k =' << endl << kernel << endl;
Mat dst7;
filter2D(src, dst7 ,-1, kernel);
namedWindow("Figure9", CV_WINDOW_AUTOSIZE);
imshow("Figure9", dst7);
// 11 生成一个全0图像
Mat dst8 = Mat::zeros(src.size(), src.type());
namedWindow("Figure10", CV_WINDOW_AUTOSIZE);
imshow("Figure10", dst8);
// 12 其他初始化
Mat dst9 = Mat::zeros(2,2, CV_8UC1);
cout << 'd =' << endl << dst9 << endl;
Mat dst10 = Mat::eye(3, 3, CV_8UC1);
cout << 'd =' << endl << dst10 << endl;
waitKey(0);
return 0;
}