课程链接:https://www.bilibili.com/video/av29600072?p=2
内容
- 加载图像 ( cv::imread )
- 显示图像 ( cv::namedWindow 与 cv::imshow )
- 修改图像 ( cv::cvtColor )
- 保存图像 ( cv::imwrite )
- 完整代码
1. 加载图像 ( cv::imread )
imread 功能是加载图像文件成为一个 Mat 对象。其中第一个参数表示图像文件名称;第二个参数表示加载的图像的类型,参数默认值为 1 ,支持常见的三个参数值:
- IMREAD_UNCHANGED ( <0 ) 表示加载原图,不做任何改变
- IMREAD_GRAYSCALE ( 0 ) 表示把原图作为灰度图像加载进来
- IMREAD_COLOR ( >0 ) 表示把原图作为 RGB 图像加载进来
OpenCV 很多图像处理都是针对 RGB 图像来做的,所以加载图像时第二个参数的默认值为 1。
注意:OpenCV 支持 JPG、PNG、TIFF 等常见格式图像文件加载
2. 显示图像 ( cv::namedWindow 与 cv::imshow )
namedWindow:
- 功能是创建一个 OpenCV 窗口,它是由 OpenCV 自动创建与释放,不用手动销毁它。
- 常见用法
namedWindow("Window Title", WINDOW_AUTOSIZE);
- WINDOW_AUTOSIZE 会自动根据图像大小,显示窗口大小,不能人为改变窗口大小
- WINDOW_NORMAL 跟 QT 集成的时候会使用到,允许修改窗口大小,一般用不到。
imshow:
- 根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二个参数是 Mat 对象。
imshow("Window Title", MatName);
3. 修改图像 ( cv::cvtColor )
- cvtColor 的功能是把图像从一个色彩空间转换到另外一个色彩空间,用 imread 加载进来的图像多数都是 RGB 图像。
- cvtColor 有三个参数,第一个参数表示源图像;第二个参数表示色彩空间转换之后的图像;第三个参数表示源和目标色彩空间,如:COLOR_BGR2HLS、COLOR_BGR2GRAY 等。
cvtColor(image, gray_image, COLOR_BGR2GRAY);
注意:
- cvtColor 和 COLOR_BGR2GRAY 都定义在头文件 opencv2/imgproc.hpp 中。
- 除了 COLOR_BGR2GRAY 之外,还有很多的转换参数,如 COLOR_BGR2HLS 等。
- 在旧版本中,转换参数为 CV_BGR2GRAY ,新版本中使用 COLOR_BGR2GRAY。
4. 保存图像 ( cv::imwrite )
- 保存图像文件到指定目录路径。
- 只有 8位、16位的 PNG、JPG、Tiff 文件格式而且是单通道或者三通道的 BGR 的图像可以通过这种方式保存。
- 保存 PNG 格式的时候可以保存透明通道的图片。
- 可以指定压缩参数。
- 存储的文件类型由 “文件名” 的扩展名确定。
5. 完整代码
#include <opencv2/opencv.hpp>
#include <iostream>
int main(int argc, char** argv)
{
cv::String imageName = "HappyFish.jpg";
if (argc > 1)
imageName = argv[1];
cv::Mat image = cv::imread(cv::samples::findFile(imageName), cv::IMREAD_COLOR);
if (image.empty())
{
std::cout << "No image" << std::endl;
return -1;
}
cv::namedWindow("Display", cv::WINDOW_AUTOSIZE);
cv::imshow("Display", image);
cv::waitKey(0);
cv::namedWindow("Transition", cv::WINDOW_AUTOSIZE);
cv::Mat imageOther;
cv::cvtColor(image, imageOther, cv::COLOR_BGR2GRAY);
cv::imshow("Transition", imageOther);
cv::waitKey(0);
cv::namedWindow("Transition1", cv::WINDOW_AUTOSIZE);
cv::cvtColor(image, imageOther, cv::COLOR_BGR2HLS);
cv::imshow("Transition1", imageOther);
cv::imwrite("../imageOther.jpg", imageOther);
cv::imwrite("../imageOther.png", imageOther);
cv::imwrite("../imageOther.tiff", imageOther);
cv::waitKey(0);
return 0;
}