Opencv C++入门学习 二、Mat创建图像(矩阵),获取图像信息,感兴趣区域(Rect)

二、Mat创建图像(矩阵),获取图像信息,感兴趣区域(Rect)

代码实现:

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
	//Mat image1;//创建一个图像空间
	Mat image1 (100, 100, CV_8U, 100);//创建一个指定大小、数据类型、初始值的图像空间
	image1= imread("D://lena.png");  //读取图像;
	if (image1.empty())
	{
		cout << "读取错误" << endl;
		return -1;
	}
	namedWindow("输入的图像",WINDOW_NORMAL);  
	//创建显示窗口,不加这行代码,也能显示但是默认窗口大小不能改变,此处使用WINDOW_NORMAL是为了使图像能够缩放
	imshow("输入的图像", image1);  //显示图像;
	Mat imageROI(image1, Rect(0, 0, 400, 400));  //定义感兴趣区域
	imshow("感兴趣区", imageROI);
	cout << "图像的行数为: " << image1.rows << endl;  //获取图像的高度,行数;
	cout << "图像的列数为: " << image1.cols << endl;  //获取图像的宽度,列数;
	cout << "图像的通道数为: " << image1.channels() << endl;  //获取图像的通道数,彩色图=3,灰度图=1;
	cout << "图像的尺寸为: " << image1.size << endl;  //获取图像的尺寸,行*列;
	cout << "感兴趣区图像的行数为: " << imageROI.rows << endl;  //获取图像的高度,行数;
	cout << "感兴趣区图像的列数为: " << imageROI.cols << endl;  //获取图像的宽度,列数;
	cout << "感兴趣区图像的通道数为: " << imageROI.channels() << endl;  //获取图像的通道数,彩色图=3,灰度图=1;
	cout << "感兴趣区图像的尺寸为: " << imageROI.size << endl;  //获取图像的尺寸,行*列;
	waitKey(0);  //暂停,保持图像显示,等待按键结束

	return 0;
}

首先通过Mat创建一个图像空间,并将图像信息导入。

1a53d86d72e14ad8844a0c7c40d6315c.png

此处Mat image1;与Mat image(100, 100, CV_8U, 100);二选一即可,对于上述代码,实际上还可以写成: 

Mat image1=imread(D://lena.png);

而后执行一个if循环,其判定条件为“image1=empty()”,当导入进去image1中的图像不存在时,输出:读取错误,否则不执行该操作。

namedWindow("输入的图像",WINDOW_NORMAL); 

    //创建显示窗口,不加这行代码,也能显示,但是默认窗口大小不能改变,此处使用WINDOW_NORMAL是为了使图像能够缩放。

而后对图像进行输出,并输出获取的图像的宽度(列数),高度(行数),尺寸和通道数:

waitKey(0);  //暂停,保持图像显示,等待按键结束。

若此处设置为waitkey(1000),则图片会在出现后1000毫秒时关闭。

函数介绍:

    Mat image1 (100, 100, CV_8U, 30);//创建一个指定大小、数据类型、初始值的图像空间。

该代码意思为创建一个100X100的灰度图像空间,其初始值为30.

其中数据类型有很多种,常用的应该有:

CV_8U:8位无符号型(0~255),即灰度图像;

CV_8UC3:三通道8位无符号型,这里三通道指B(蓝)G(绿)R(红),与matlab中的RGB正好相反。

对于灰度图像:可以直接给出初始值,也可以使用Scalar();

 Mat image1(100,100,CV_8U, 100);
Mat image1(100,100,CV_8U, Scalar(100));

对于三通道图像:使用Scalar();

Mat image1(100,100,CV_8UC3, Scalar(100,100,100));

另外:

b037e975ef6d4896bd477c0dc34e25a3.png

在此处,可以利用函数Rect()定义一个感兴趣区域,

其中Rect()有四个参数,Rect(a,b,c,d):
a:感兴趣区域列(cols)的起点;
b:感兴趣区域行(rows)的起点;
c:感兴趣区域的列数(cols);
d:感兴趣区域的行数(rows);

在不执行定义感兴趣区时,

f21f9bbc75764863bc5de1fd680f6ee0.png

输出结果如下:

bc83284c3e3a430f9f82724116922f5d.png

0d0405ac251048bb8b6812efc449c3cd.png

执行定义感兴趣区后,

7e3ebcd619ee4075ae2ff429ae6e64ed.png

输出结果为:

3ff269fd39484c468eb5ed8d7a6b755b.png

548d648013404c7a83013da38e273469.png

猜你喜欢

转载自blog.csdn.net/w2492602718/article/details/133977214
今日推荐