1.读取图像

	Mat src = imread("D:/image/test.jpg");  //读取图像
	if (src.empty()) {		//src为空,即读取图像失败
		cout << "could not load image...." << endl;
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);	//新建显示窗口(这步在opencv3中可以不写)
	imshow("input", src);

2.创建与现有图像src大小及类型相同的空白图像

Mat dst;
dst=Mat(src.size(), src.type());  //创建空白图像
										//src.size()是src的规格
										//src.type()是src的图像类型(比如RGB)
dst = Scalar(127, 0, 255);     //给图像填充颜色
namedWindow("output", WINDOW_AUTOSIZE);
imshow("output", dst);

3.克隆现有图像

Mat dst1;
dst1 = src.clone();    //克隆现在有的图像 
namedWindow("output1", WINDOW_AUTOSIZE);
imshow("output1",dst1);

4.复制现有图像

	Mat dst2;
	src.copyTo(dst2);    //复制现在有的图像
	namedWindow("output2", WINDOW_AUTOSIZE);
	imshow("output2", dst2);

copyTo和Clone的区别:
clone 是完全的深拷贝,在内存中申请新的空间
copyTo 也是深拷贝,但是否申请新的内存空间,取决于dst矩阵头中的大小信息是否与src一至,若一致则只深拷贝并不申请新的空间,否则先申请空间后再进行拷贝.

5.将图像转为灰度图像

Mat dst3;
cvtColor(src, dst3, COLOR_BGR2GRAY);  //转化为灰度图像
																	//参数说明:源图像、目标图像、目标图像格式
printf("input image channels:%d\n", src.channels());  //打印通道数
printf("output image channels:%d\n", dst3.channels());
namedWindow("output3", WINDOW_AUTOSIZE);
imshow("output3", dst3);

6.得到图像的行数、列数以及第一个像素的灰度值指针

	int cols = dst3.cols;    //得到行宽度(列数)
	int rows = dst3.rows;    //得到列宽度(行数)
	printf("the cols number of the imgae is:%d\n", cols);
	printf("the rows number of the image is:%d\n", rows);
	const uchar* firstRow = dst3.ptr<uchar>(0);  //得到第一个像素的灰度值的指针
	printf("first pixel value:%d\n", *firstRow);

7.生成 CV_8UC3类型的图像

	Mat M(10, 10, CV_8UC3, Scalar(0, 0, 255));
		//参数说明:1宽度 2高度 3数据类型 4颜色
	//cout << "M="<<endl << M << endl;

	imshow("image_M", M);

8.创建二维矩阵

	Mat m1;     //创建二维矩阵
	m1.create(src.size(), src.type());
	m1 = Scalar(0, 0, 255);
	imshow("二维矩阵", m1);

9.对图像做掩膜操作

	Mat dst4;
	Mat kernel= (Mat_<double>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);   //定义一个掩膜矩阵
	filter2D(src, dst4, -1, kernel);
	namedWindow("filter2D", WINDOW_AUTOSIZE);
	imshow("filter2D", dst4);

10.创建一个零矩阵

	Mat m2 = Mat::zeros(src.size(), src.type());  //生成一个矩阵,元素的值全是0
	imshow("zeros", m2);

11.生成一个对角线是1,其他均是0的矩阵

	Mat m3 = Mat::eye(src.size(), src.type());  //生成一个矩阵,主对角线元素是1,其他都是0
	imshow("eye", m3);
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐