数字图像处理与OpenCV(2)--载入、显示、保存及修改图像

来源:互联网 发布:什么是互联网软件开发 编辑:程序博客网 时间:2024/06/14 12:47

刚开始准备先学一下OpenCV的一些基本操作,到后面一些再结合数字图像处理来分析一下OpenCV是如何工作的,今天先学习下OpenCV的图像加载、显示和保存(这里用的是OpenCV3.2.0版本)。


第一件事是声明一个表示图像的变量,这个变量是cv::Mat类型。

加载图像(imread)

imread:功能是加载图像文件为一个Mat对象。

函数原型:Mat imread( const String& filename, int flags = IMREAD_COLOR );

第一个参数表示图像文件名称;

第二个参数表示加载为什么类型,常用的三个类型:IMREAD_UNCHANGED(<0)表示加载原图(不做任何改变),IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来,IMREAD_COLOR(>0)(默认是这个)表示把原图作为RGB图像加载进来。

在使用该图像前需要检查图像是否被正确读取,检测方法如下:

if(!image.data){   //图像尚未创建}

此处成员变量data实际上是指向已分配的内存块的指针,包括图像数据,当不存在数据时,它被简单的设置为0.

保存图像(imwrite):

函数原型:bool imwrite( const String& filename, InputArray img,

const std::vector<int>& params = std::vector<int>());

imwrite:功能是保存图像到指定目录路径文件

第一个参数表示保存的文件路径和名称;(以后缀来决定保存哪种格式的图片文件)

第二个参数表示要保存的图像对象。

 

显示图像(imshow):

函数原型:void imshow(const String& winname, InputArray mat);

函数原型:void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);

namedWindow是用来创建一个显示窗口,一般用法:namedWindow(“output img HLS”, CV_WINDOW_AUTOSIZE); 也可以不创建,那么在imshow的时候opencv会自动创建。

imshow,第一个参数是窗口的名字,第二个参数就是要显示的图片对象。

修改图像:

OpenCV提供了很多处理函数,先简单介绍几个

函数原型:void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );

cvtColor:功能是把图像从一个色彩空间转换到另外一个色彩空间。

第一个参数表示源图像;

第二个参数表示色彩空间转换后的图像(目标图像);

第三个参数表示源和目标色彩空间,比如:COLOR_BGR2HLS(RGB色彩空间转HLS色彩空间),COLOR_BGR2HSV(RGB色彩空间转HSV色彩空间),COLOR_BGR2GRAY(RGB色彩空间转灰度图)

第四个参数默认为0。(不知道是啥)

函数原型:void flip(InputArray src, OutputArray dst, int flipCode);

flip:功能是把图像水平翻转。

第一个参数表示原图像;


第二个参数表示水平翻转后的图像(目标图像);


第三个参数表示翻转模式,flipCode==0垂直翻转(沿X轴翻转),flipCode>0水平翻转(沿Y轴翻转),flipCode<0水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)


OpenCV3.2.0版本加载图像、修改图像、保存图像代码如下:

#include <opencv2/opencv.hpp>using namespace cv; //使用OpenCV命名空间int main() {//图像加载Mat src1 = imread("1.jpg"); //默认加载,按照IMREAD_COLOR(RGB图像方式)Mat src2 = imread("1.jpg", IMREAD_GRAYSCALE); //灰度图加载namedWindow("input img RGB", CV_WINDOW_AUTOSIZE);namedWindow("input img GRAY", CV_WINDOW_AUTOSIZE);imshow("input img RGB", src1);imshow("input img GRAY", src2);//图像修改Mat dest_result;flip(src1, dest_result, 1);//转为水平翻转的目标图像namedWindow("output img result", CV_WINDOW_AUTOSIZE);//创建一个显示用窗口imshow("output img result", dest_result);Mat dest_HSV; //转为HSV的目标图像cvtColor(src1, dest_HSV, COLOR_BGR2HSV);namedWindow("output img HSV", CV_WINDOW_AUTOSIZE);//创建一个显示用窗口imshow("output img HSV", dest_HSV);Mat dest_HLS; //转为HLS的目标图像cvtColor(src1, dest_HLS, COLOR_BGR2HLS);namedWindow("output img HLS", CV_WINDOW_AUTOSIZE);imshow("output img HLS", dest_HLS);Mat dest_GRAY; //转为灰度图的目标图像cvtColor(src1, dest_GRAY, COLOR_BGR2GRAY);//namedWindow("output img GRAY"); //没有建立显示窗口,opencv会自动创建imshow("output img GRAY", dest_GRAY);//图像保存imwrite("1_result.bmp", dest_result);imwrite("1_gray.bmp", dest_GRAY);imwrite("1_hls.bmp", dest_HLS);imwrite("1_hsv.bmp", dest_HSV);waitKey(0);return 0;}


阅读全文
0 0