C++图像处理初学——opencv4加载,修改,保存图像

opencv初学:加载、修改、保存图像

文章目录

  • opencv初学:加载、修改、保存图像
    • 导言
    • 一、创建项目
    • 二、加载图片
    • 三、修改图片
    • 四、保存图像
    • 五、显示图像
    • 总结

导言

前期准备:
1、Visual Studio安装成功
2、opencv安装成功且配置正确
3、C++项目opencv配置正确
4、项目目录下包含一张测试图片:test.png
5、具有一丢丢C++基础

一、创建项目

打开VisualStudio创建一个新的:控制台应用。
C++图像处理初学——opencv4加载,修改,保存图像_第1张图片
然后把我们创建好的属性表导入
C++图像处理初学——opencv4加载,修改,保存图像_第2张图片
选择:视图——>其他窗口——>属性管理器
然后进入属性管理器,Debug|X64单机右键,选择:添加现有属性表
C++图像处理初学——opencv4加载,修改,保存图像_第3张图片
我们将创建好的属性表直接导入到我们新建好的项目中,直接使用就可以了,避免重复造轮子。
然后我们便得到了一个包含opencv模块的C++项目。

二、加载图片

在Opencv4中摒弃了一些与原版本不同的东西,一些API的使用上有细微的差别。
加载图片:imread
很好理解,就是ImageRead的一个简写,问题不大,相信读者都可以理解。
在imread(加载图片过程中),我们可以加载原图,灰阶图等等。可以根据需要自行添加就ok了。
imread(参数一,参数二)
其中,参数一表示加载的图像文件名称,第二个参数表示,加载图片的类型。
常见参数:
IMREAD_UNCHANGED:表示加载原图,不做任何改变
IMREAD_GRAYSCAALE:表示加载灰阶图(灰度图)
IMREAD_COLOR:表示把原图作为RGB图像加载进来
注意:opencv支持jpg、png、TIFF等常见格式图像文件的加载
代码演示

#include 
#include ;
using namespace std;
using namespace cv;
int main() {
	//创建一个矩阵,存图片
	Mat src;
	//加载原图
	src=imread("test.png",IMREAD_UNCHANGED);
	//加载灰度图
	//src=imread("test.png",IMREAD_GRAYSCALE);
	//把原图RGB加载进来
	//src=imread("test.png",IMREAD_COLOR);
	//显示图片
	//创建一个窗体容器,可以省略,但是不能忘记
	//第二个参数有很多,但是我们这里使用WINDOW_AUTOSIZE,窗体大小自动适配
	namedWindow("srcImage",WINDOW_AUTOSIZE);
	//显示图片
	imshow("srcImage",src);
	//让图像不瞬间消失,如果没有,则图像一闪而过
	waitKey(0);	
	return 0;
}

ok经过上述得到说明,应该对图像加载有了一个大致的了解了,下面我们给代码新加一串东西,让程序可以判断图片是否加载。

#include 
#include ;
using namespace std;
using namespace cv;
int main() {
	//创建一个矩阵,存图片
	Mat src;
	//加载原图
	src=imread("test.png",IMREAD_UNCHANGED);
	//给出判断条件
	if(!src.data){
		//加载图片失败返回一个-1,并提示,图片加载失败
		printf("加载图片数据失败!");
		return 0;
	}
	//加载灰度图
	//src=imread("test.png",IMREAD_GRAYSCALE);
	//把原图RGB加载进来
	//src=imread("test.png",IMREAD_COLOR);
	//显示图片
	//创建一个窗体容器,可以省略,但是不能忘记
	//第二个参数有很多,但是我们这里使用WINDOW_AUTOSIZE,窗体大小自动适配
	namedWindow("srcImage",WINDOW_AUTOSIZE);
	//显示图片
	imshow("srcImage",src);
	//让图像不瞬间消失,如果没有,则图像一闪而过
	waitKey(0);	
	return 0;
}

至此,加载和显示图像,完成。

三、修改图片

在计算机中,我们的图片加载,在计算机看来就是一串像素点,计算机中图片修改,其实就是对像素点进行修改。我们所有的操作,其实都是在图片的像素矩阵上完成的。
修改图片:cvtColor
cvtColor:把图像从一个色彩空间,转换到另一个色彩空间,共有三个参数:
第一个参数:原图像矩阵:src
第二个参数:色彩空间转换后的图像:dst
第三个参数:源和目标色彩空间,例如:COLOR_BGR2HLS、COLOR_BGR2GRAY、COLOR_BRG2HSV等。
使用语法:

cvtColor(src,dst,COLOR_BGR2HLS);

具体代码:

#include 
#include ;
using namespace std;
using namespace cv;
int main() {
	//创建一个矩阵,存图片
	Mat src;
	//加载原图
	src = imread("test1.png", IMREAD_UNCHANGED);
	//给出判断条件
	if (!src.data) {
		//加载图片失败返回一个-1,并提示,图片加载失败
		printf("加载图片数据失败!");
			return 0;
	}

	//修改图片
	Mat dst;
	cvtColor(src, dst, COLOR_BGR2HLS);
	//显示dst
	namedWindow("dstImage", WINDOW_AUTOSIZE);
	imshow("dstImage", dst);

	namedWindow("srcImage", WINDOW_AUTOSIZE);
	//显示图片
	imshow("srcImage", src);
	//让图像不瞬间消失,如果没有,则图像一闪而过
	waitKey(0);
	return 0;
}

四、保存图像

保存图像:imwrite
imwrite其实就是ImageWrite的缩写,没啥可说的。
保存图片到指定的目录,该目录建议为绝对路径,且包含保存后的文件名。
使用样例:

imwrite(fileName,saveFileMat);

演示代码:

#include 
#include ;
using namespace std;
using namespace cv;
int main() {
	//创建一个矩阵,存图片
	Mat src;
	//加载原图
	src = imread("test1.png", IMREAD_UNCHANGED);
	//给出判断条件
	if (!src.data) {
		//加载图片失败返回一个-1,并提示,图片加载失败
		printf("加载图片数据失败!");
			return 0;
	}

	//修改图片
	Mat dst;
	cvtColor(src, dst, COLOR_BGR2HLS);
	imshow("dst", dst);

	//保存图片
	imwrite("test11.png", dst);

	namedWindow("srcImage", WINDOW_AUTOSIZE);
	//显示图片
	imshow("srcImage", src);
	//让图像不瞬间消失,如果没有,则图像一闪而过
	waitKey(0);
	return 0;
}

阅读代码的时候注意看注释

五、显示图像

其实就两个:
imshow
namedWindow
namedWindow功能是创建一个OpenCV窗口,它是由Opencv自动创建和释放的,你无需销毁它。
常见用法:

namedWindwo(“windowsTitle”,WINDOWS_AUTOSIZE)

WINDOWS_AUTOSIZE:会自动根据图像大小,显示窗体大小,不能认为改变窗体大小

WINDOWS_NORMAL,和QT集成的时候会使用,允许修改窗口大小
然后是imshow
没啥好说的,直接上代码

imshow(windowName,ImageMat)

第一个参数为显示的窗体title
第二个参数为所要显示的窗体矩阵

总结

imread:读取图片
cvtColor:修改图片
imwrite:保存图片
imshow:显示图片
nameWindow:创建窗体容器
文中如有错误,请联系笔者修改!
如有侵权,请联系笔者删除!

你可能感兴趣的:(opencv初讲,c++,图像处理,opencv)