以下知识基本都摘抄自网络,再加上自己的一些问题,记录下来,被日后查用。
# include <opencv.hpp>
using namespace cv;
using namespace std;
int main()
{ //声明一个表示图像的变量,变量的类型是CV::Mat 类型 虽然目前为止 我还不知道 这个Mat到底是何方神圣
//这这样就声明了一个图像变量 image 其宽度和高度都是0
Mat image;
//调用CV::Mat的size()函数可以获取image的尺寸
cout << "szie:" << image.size().height
<< '\t' << image.size().width << endl;
//采用imread()函数读取一张图片使其成为Mat对象,其中 函数的第一个参数表示图像文件的名称
//后面有一个参数很重要,打开函数一路查看源代码定义 可以查看后面参数传递值的时候 这个函数返回的是啥样的东西 虽然目前对通道 深度这些定义还不太明白
image = imread("C:\\Users\\Administrator\\Pictures\\护眼模式_20190815095139.jpg", IMREAD_COLOR);
cout << "image_size:" << image.size().height
<< "\t" << image.size().width << endl;
//检测图像是否读取成功 此处的成员变量data事实上是指向已经分配的内存块指针,包括图像数据,当数据不存在时,它被简单设置为0
if(image.data == NULL)
{
printf("图像读取失败");
}
//namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。 常见用法namedWindow("Window Title", WINDOW_AUTOSIZE)
//WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小
//WINDOW_NORMAL, 跟QT集成的时候会使用,允许修改窗口大小。
//imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二参数是Mat对象
namedWindow("Original Image");
imshow("Original Image",image);
//话说 flip函数可以进行图像的翻转,可以在原地进行翻转,即不需要创建新的图像,但是试了一下并不可以啊 ,这是what?
//所谓的翻转 就是试图像关于X轴对称或者关于Y轴对称或者关于原点对称
Mat result, gray_image;
flip(image,result,1);
namedWindow("Output Image");
imshow("Output Image", image);
//cvtColor的功能是把图像从一个彩色空间转换到另外一个色彩空间,
//有三个参数,第一个参数表示源图像、第二参数表示色彩空间转换之后的图像、第三个参数表示源和目标色彩空间如:COLOR_BGR2HLS 、COLOR_BGR2GRAY 等
cvtColor(image, gray_image, COLOR_BGR2GRAY);
//图像的保存 保存时后缀名即为保存的格式
imwrite("output.bmp", result);
waitKey(0);
return 0;
}