前期准备:
1、Visual Studio安装成功
2、opencv安装成功且配置正确
3、C++项目opencv配置正确
4、项目目录下包含一张测试图片:test.png
5、具有一丢丢C++基础
打开VisualStudio创建一个新的:控制台应用。
然后把我们创建好的属性表导入
选择:视图——>其他窗口——>属性管理器
然后进入属性管理器,Debug|X64单机右键,选择:添加现有属性表
我们将创建好的属性表直接导入到我们新建好的项目中,直接使用就可以了,避免重复造轮子。
然后我们便得到了一个包含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:创建窗体容器
文中如有错误,请联系笔者修改!
如有侵权,请联系笔者删除!