OpenCV笔记(三)加载、显示图像
来源:互联网 发布:steam mac dota2 编辑:程序博客网 时间:2024/05/16 23:54
目标
本篇教程中你将学会:
- 加载图像(使用cv::imread)
- 创建一个命名的OpenCV窗口(使用cv::namedWindow)
- 在OpenCV窗口里显示图像(使用cv::imshow)
源代码
#include <opencv2/core.hpp>#include <opencv2/imgcodecs.hpp>#include <opencv2/highgui.hpp>#include <iostream>#include <string>using namespace cv;using namespace std;int main( int argc, char** argv ){ String imageName( "../data/HappyFish.jpg" ); // 默认路径 if( argc > 1) { imageName = argv[1]; } Mat image; image = imread( imageName, IMREAD_COLOR ); // 读取图像 if( image.empty() ) // 检查图像可用否 { cout << "Could not open or find the image" << std::endl ; return -1; } namedWindow( "Display window", WINDOW_AUTOSIZE ); // 为显示创建一个窗口 imshow( "Display window", image ); // 显示我们的图像 waitKey(0); // 在窗口中等待输入按键 return 0;}
解释
在OpenCV中,我们有多个模块。每个模块处理图像不同方面或者使用不同方法。观察教程中的用户指南结构便可略知一二。在使用它们之前,首先需要包含声明了独立模块内容的头文件。
以下两个头文件你几乎都要用到:
- core,定义了库的基本构建模块
- highgui,包含了输入输出操作函数
#include <opencv2/core.hpp>#include <opencv2/imgcodecs.hpp>#include <opencv2/highgui.hpp>#include <iostream>#include <string>
我们还include了iostream以增加控制台的输入输出。为了避免数据结构和函数名与其他库冲突,OpenCV有自己的命名空间:cv.为了避免在每个关键词前面使用cv::,可以在整个文件前面如下导入命名空间:
using namespace cv;
这也适用于STL库(用于控制台I/O)。现在让我们分析main函数。我们要确保从命令行获得有效的图像名参数。这样我们能获得一个默认图像“Happy Fish.ipg”。
String imageName( "../data/HappyFish.jpg" ); // 默认路径 if( argc > 1) { imageName = argv[1]; }
创建一个Mat对象用于存储加载的图像。
Mat image;
现在我们使用cv::imread函数加载图像,第一个参数(argv[1])指定加载图像名。第二个参数指定我们需要的图像格式。如下:
- IMREAD_UNCHANGED(<0)加载原图像(如果有alpha通道也会包含进来)
- IMREAD_GRAYSCALE(0)加载图像的亮度图
- IMREAD_COLOR(>0)以RGB格式加载图像
image = imread( imageName, IMREAD_COLOR ); // 读取图像
OpenCV提供支持:
Windows位图图像格式(bmp)
便携式图像格式(pbm、pgm、ppm)
在插件的帮助下你也可以加载如JPEG格式(jpeg,jpg,jpe)(如果你要构建自己的库你需要指定使用他们,否则使用默认的包)
JPEG2000(jp2-在CMake中称为jasper)
TIFF文件(tiff,tif)
便携式网络图形格式(png)
此外还支持OpenEXR.
当图像数据加载正确后,我们要把图像显示出来,所以我们使用cv::namedWindow函数创建OpenCV窗口。一旦你创建好他们,OpenCV将自动管理他们。你只需要指定它的名字以及以及如何处理图像尺寸的视觉变化。有以下可能:
- WINDOW_AUTOSIZE 这是唯一一个支持你不用Qt后端的。这种情况下,窗口将显示图像本身大小,并且不允许调整大小。
- WINDOW_NORMAL 支持Qt你可以使用这个来允许窗口调整大小。图像会根据当前窗口大小改变自己的大小。使用|操作符,你可以指定图像是否保持宽高比
(WINDOW_KEEPRATIO)或者(WINDOW_FREERATIO).
namedWindow( "Display window", WINDOW_AUTOSIZE ); // 创建一个窗口供图像显示.
最后,使用cv::imshow函数将新的图像更新在OpenCV窗口中。指定要更新的OpenCV窗口的名字以及要更新的图像,如下操作
imshow( "Display window", image ); // 在窗口中显示图像
因为我们希望我们的窗口在用户按下一个键之前一直显示(否则程序会很快的结束,你很难看到图像),我们使用cv::waitKey函数,它只有一个参数,代表我们等待用户输入的时长(以毫秒为单位)。零意味着永远等待。
waitKey(0); // 在窗口中等待一个按键
结果
- 编译你的代码,然后运行可执行文件,其提供了一个图像的路径作为参数。Windows下的可执行文件的可扩展名是exe.当然要保证你的图像
和你的程序在同一个目录下。
./DisplayImage HappyFish.jpg
- 一切没有问题的时候,你将看到一个含有图像的窗口。
END
- OpenCV笔记(三)加载、显示图像
- opencv加载显示图像
- OpenCV学习笔记(基于OpenCV 2.4)二:图像的加载显示及简单变换
- 【OpenCV学习笔记】三、图像读取、显示及保存
- opencv 2.x学习笔记(一)加载和显示图像
- opencv学习笔记(一)——图像加载、显示、输出
- Python3+OpenCV学习笔记(一):图像加载、显示和保存
- OpenCV实践笔记(1)----图像显示
- OpenCV 学习笔记(1)显示图像
- OPENCV笔记(一)图像显示
- OpenCV学习笔记(一):图像显示
- OpenCV学习笔记(2)之图像通道分离和RGB三通道直方图显示
- Opencv学习笔记-显示图像
- OpenCV学习笔记-显示图像
- 【opencv学习笔记】显示图像
- 图像显示与加载——opencv(转)
- opencv 实现加载并显示图像
- opencv加载并显示图像程序
- Ubuntu Linux hadoop开发环境搭建详细教程 一、安装Linux虚拟机
- 数据库SQLite之常见错误及注意事项<二>
- Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)
- 基于的朴素贝叶斯的文本分类(附完整代码(spark/java)
- oracle索引详解
- OpenCV笔记(三)加载、显示图像
- Ubuntu14.04 安装 Sublime Text 3 及常用插件推荐
- 八叉树 C++ 基础 源码
- oracle---常用操作
- Android6.0动态权限的处理
- 三角函数公式推导
- !
- Android五大组件-Fragment
- 最新ps cs6序列号 永久免费可用