OpenCV学习记录3

一 学习内容

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;
}

 

你可能感兴趣的:(OpenCV学习)