OpenCV图像的加载、显示
OpenCV图像的加载、显示
Mat类是OpenCV里使用广泛的一个类,使用它可以轻松的用几行代码实现图像的加载、显示。
先上代码:
// OpenCV_self.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
#include <opencv2\opencv.hpp>
int main()
{cv::Mat img;img = cv::imread("F:/openCV/images/juice.jpg"); // 读取图像
if (img.empty()) // 判断是否读取成功{std::cout << "导入图像失败!";std::cin.get(); // 读取错误时,为了能在控制台dos窗口看到输出的信息,而不是一闪而过return -1;}else{std::cout << "导入图像成功!";}
cv::imshow("result", img); // 显示图像cv::waitKey(0); // 一直显示图像直到摁下任意键
}
执行结果如下图所示:
imread函数
imread函数的主要作用从一个文件加载图像。
imread函数从一个指定文件读取图像,并返回一个Mat对象,如果图像不能被读取(可能文件路径不对,没有读取权限、不支持的图像格式、错误的图像格式等原因),函数返回一个空的矩阵( Mat::data==NULL )。我们可以用Mat类的empty()函数去判断是否读取到图像。
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
参数1 filename, 读取的图片文件名。
参数2 flags, 一个读取标记,值从cv::ImreadModes获取,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关
返回值,Mat 对象, 返回读取的图像,
目前OpenCV4.4中支持的图像格式如下:
Windows bitmaps - *.bmp, *.dib (一直支持)
JPEG files - *.jpeg, *.jpg, *.jpe (详情见下面Note 部分)
JPEG 2000 files - *.jp2 (详情见下面Note 部分)
Portable Network Graphics - *.png (详情见下面Note 部分)
WebP - *.webp (详情见下面Note 部分)
Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (一直支持)
PFM files - *.pfm (详情见下面Note 部分)
Sun rasters - *.sr, *.ras (一直支持)
TIFF files - *.tiff, *.tif (详情见下面Note 部分)
OpenEXR Image files - *.exr (详情见下面Note 部分)
Radiance HDR - *.hdr, *.pic (一直支持)
Raster and Vector geospatial data supported by GDAL (详情见下面Note 部分)
@注意
函数是通过文件内容得到图像的格式,而不是文件的扩展名决定的,也就是说你把JPEG文件改成.png扩展名,读出来的还是JPEG文件类型。所以说修改文件后缀名来改变文件类型是错误的。
彩色图像数据,通道数据是以 B G R顺序存放的。.
使用IMREAD_GRAYSCALE时,其使用的是内建的灰度转换方式,如果可用的话,其输出结果可能与cvtColor()输出的结果不同。
在Microsoft Windows操作系统和苹果的 MacOS操作系统中, OpenCV 图像编解码默认使用(libjpeg,libpng, libtiff, and libjasper),所以在MacOSX中还有一个选择使用本地的MacOSX 图像阅读器,但是注意的是由于MacOSX内置的颜色管理,当前本地的图像加载器给出的是不同的像素值。
对于 Linux*, BSD flavors和其他类似于Unix的开源操作系统,OpenCV寻找系统提供的编码器,安装相关的包(开发包,例如, 在Debian*和 Ubuntu 中的"libjpeg-dev")来获得编码支持,或者在CMake中选中OPENCV_BUILD_3RDPARTY_LIBS标志,自己去编译这些开发包。
当你设置WITH_GDAL标志为true,并且使用 IMREAD_LOAD_GDAL去加载图像,GDAL驱动将会被使用去解码图像,支持以下格式:
Raster, Vector.
如果图像文件包含EXIF信息, EXIF的 orientation (照片的方向)参数将会被考虑在内。图像可以根据这个参数对应的旋转。除非标志 IMREAD_IGNORE_ORIENTATION和 IMREAD_UNCHANGED被传递(大概是不让旋转)。
使用IMREAD_UNCHANGED标志来保持PFM图像的浮点值.
像素数缺省值必须小于,限制可以通过系统变量OPENCV_IO_MAX_IMAGE_PIXELS来设置。
imshow函数
imshow函数功能就是在指定的窗口显示一个图像。
函数原型:
CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
参数1 winname 窗口名字.
参数2 mat 显示图像的Mat对象.
如果窗口创建时使用了cv::WINDOW_AUTOSIZE 标志,图像以他的原始大小显示, 但是他仍受屏幕分辨率的限制。 否则, 图像将会被按比例缩放去适应窗口。函数可以缩放图像,依赖图像的深度:
如果图像是8位无符号整型,显示的也是8位无符号整型。
如果图像是 16位无符号整型 或32位整型,像素数被256整除. 也就是说取值区间从 [0,255*256] 映射到 [0,255].
如果图像是32位或64位浮点数, 像素值会被乘以255. 也就是说值区间从 [0,1] 映射到 [0,255].
如果窗口创建时支持OpenGL , cv::imshow 也支持 ogl::Buffer , ogl::Texture2D 和cuda::GpuMat 作为输入。
如果窗口没有在使用本函数前创建,假定使用标志cv::WINDOW_AUTOSIZE创建窗口.
如果你需要显示一个图像大于屏幕的分辨率,你需要在imshow之前调用 namedWindow("", WINDOW_NORMAL) .
@注意
本函数后面应该跟着cv::waitKey 函数来显示指定毫秒数显示时间的图像,否则将不会显示图像,例如, waitKey(0) 将会一直显示显示图像直到摁下键盘任意键,(这个适合显示图像). waitKey(25) 将会显示一帧图像25 毫秒, 然后显示就会自动关闭. (如果你把他放到一个循环里去读视频,他将会一帧一帧的显示视频)。
@注意
[仅限Windows] 摁 Ctrl+C 组合键复制图像到剪切板.
[仅限Windows] 摁Ctrl+S 组合键将会显示一个对话框去保存图像。
OpenCV图像的加载、显示相关推荐
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- OpenCV:01图片视频的加载显示
文章目录 **学习目标:** 图像与视频的加载显示 导入OpenCV的包`cv2` 窗口操作 计算按键的`ASCII`值 读取图片 用其他插件来读取(以`matplotlib`为例) 用`OpenCV ...
- Python机器视觉--OpenCV入门--OpencCV的安装与图片加载显示
1. 安装OpenCV 执行pip install opencv-python==3.4.1.15, 3.4.2之后有些算法申请了专利,用不了了.(使用其他版本也可以) 安装opencv扩展包(选装) ...
- java 显示网页gif_Java在窗口上加载显示GIF动画图像
Java在窗口上加载显示GIF动画图像,将多个独立的GIF图像串联在一起显示,形成GIF特有的动画形式.主要代码如下: ImageIcon[] images; //用于动画的图标数组 Timer an ...
- glide 加载webp_如何使您的网站通过WebP图像快速加载闪电
glide 加载webp by Carmen Chung 通过钟Car 如何使您的网站通过WebP图像快速加载闪电 (How to make your website load lightning f ...
- three.js 加载显示文字
three.js 加载显示文字 代码放到 ./three.js/examples/ 下 <!DOCTYPE html> <html lang="en">&l ...
- Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?
1. 在Activity调用onCreate()等生命周期之前,Activity会调用attach()方法,而在attach()方法中会调用如下代码 onAttach() {PolicyManager ...
- thinkphp+ajax无刷新分页并加载显示图片
2019独角兽企业重金招聘Python工程师标准>>> 最近自己用thinkphp和bootstrap做一个小站点,在用到ajax与后台数据库交互实现无刷新分页时,因为我需要返回的数 ...
- Ionic+Angular+Express实现前后端交互使用HttpClient发送get请求数据并加载显示(附代码下载)
场景 Ionic介绍以及搭建环境.新建和运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166 在上面搭建起 ...
最新文章
- 软件测试培训完就业方向怎么选择
- 深入Redis内部-Redis 源码讲解
- 面试问:Kafka 为什么速度那么快?
- 第二章java编程基础测试题_Java编程基础测试题分享
- PHP CLI应用的调试原理
- 转 html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
- mysql添加完全一样的一条记录_MYSQL插入一条新的数据的时候,判断表中是否有相同数据的SQL怎么写?...
- Objects.equals 有坑!!!
- 一、kafka安装下载与kafka初步应用
- 【PAT甲】1051 Pop Sequence (25分)判断出栈顺序的合法性
- 基于微信小程序的透析耗材管理系统
- HG255d 刷最新openwrt Pandorabox并安装njit拨号
- 超声成像突破衍射极限,有望检测肿瘤
- 大学计算机简单的感想,爱计算机的我大学生活感悟
- 20年研发管理经验谈(十七)(终结)
- 盘点7款常用的数据分析工具
- 哪些企业可以做知识产权贯标,你不得不了解的事!
- Win7虚拟机无法连接网络怎么办?已解决!!
- 不确定性量化 (UQ) 可以显著提高预测准确性,在不确定的世界中获得最佳结果昆士兰大学Mike McKerns-中国学者网
- 易基因技术推介 | 微量cfDNA简化基因组甲基化测序(cfDNA-RBS)
热门文章
- boost::multiprecision模块complex128相关的测试程序
- boost::hana::monadic_fold_left用法的测试程序
- VTK:Utilities之ShepardMethod
- VTK:PolyData之ColoredPoints
- VTK:绘图之ParallelCoordinates
- VTK:隐式函数之ImplicitSphere1
- VTK:图片之ImageLuminance
- OpenGL textures combined组合纹理的实例
- c++ extern “C”
- QT的QWizard类的使用