二、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创建一个图像空间,并将图像信息导入。
此处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));
另外:
在此处,可以利用函数Rect()定义一个感兴趣区域,
其中Rect()有四个参数,Rect(a,b,c,d):
a:感兴趣区域列(cols)的起点;
b:感兴趣区域行(rows)的起点;
c:感兴趣区域的列数(cols);
d:感兴趣区域的行数(rows);
在不执行定义感兴趣区时,
输出结果如下:
执行定义感兴趣区后,
输出结果为: