1. 加载、显示、修改、保存图像 (OpenCV基础课程视频学习)

课程链接: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);

注意

  • cvtColorCOLOR_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;
}
发布了73 篇原创文章 · 获赞 14 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/wangyuankl123/article/details/104685688