OpenCV 图像加载、修改、显示与保存
图像加载
cv::imread
imread
功能是加载图像文件成为一个Mat
对象,- 第一个参数表示图像文件名称
- 第二个参数,表示加载的图像是什么类型,支持常见的三个参数值
IMREAD_UNCHANGED
(<0) 表示加载原图,不做任何改变IMREAD_GRAYSCALE
( 0)表示把原图作为灰度图像加载进来IMREAD_COLOR
(>0) 表示把原图作为RGB图像(实际顺序为BGR)加载进来。
注意:OpenCV支持
JPG
、PNG
、TIFF
等常见格式图像文件加载。
图像修改
cv::cvtColor
cvtColor
的功能是把图像从一个彩色空间转换到另外一个色彩空间,有三个参数,第一个参数表示源图像、第二参数表示色彩空间转换之后的图像、第三个参数表示源和目标色彩空间如:COLOR_BGR2HLS
、COLOR_BGR2GRAY
等cvtColor(image, gray_image, COLOR_BGR2GRAY)
;
图像显示
cv::namedWindos
与cv::imshow
namedWindos
功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。- 常见用法
namedWindow("Window Title", WINDOW_AUTOSIZE)
WINDOW_AUTOSIZE
会自动根据图像大小,显示窗口大小,不能人为改变窗口大小WINDOW_NORMAL
,跟QT
集成的时候会使用,允许修改窗口大小。imshow
根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二参数是Mat
对象
图像保存
cv::imwrite
- 保存图像文件到指定目录路径
- 只有8位、16位的
PNG
、JPG
、Tiff
文件格式而且是单通道或者三通道的BGR
的图像才可以通过这种方式保存 - 保存
PNG
格式的时候可以保存透明通道的图片 - 可以指定压缩参数
参考代码
代码语言:javascript复制#include<opencv2/opencv.hpp>
#include<highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
// 读入图片(默认采用BGR读入)
Mat image = imread("cat.jpg");
if (!image.data) {
printf("could not load image...n");
return -1;
}
// 修改图片
Mat invertImage;
cvtColor(image,invertImage,CV_BGR2GRAY);
// 创建两个窗口
namedWindow("My Test", CV_WINDOW_AUTOSIZE);
namedWindow("My Invert Image", CV_WINDOW_AUTOSIZE);
// 在对应窗口显示图像
imshow("My Test", image);
imshow("My Invert Image", invertImage);
// 保存图像
imwrite("./reslut.jpg",invertImage);
// 关闭
waitKey(0);
destroyWindow("My Test");
destroyWindow("My Invert Image");
return 0;
}