目录

一、OpenCV 读取图像

OpenCV 读取函数

参数:

二、OpenCV 显示图像

imshow函数

imshow函数功能

imshow函数原型

三、OpenCV 保存图像

四、结果和代码


一、OpenCV 读取图像

OpenCV 允许我们对图像执行多种操作,但要做到这一点,需要读取一个图像文件作为输入,然后我们可以对其执行各种操作。OpenCV 提供了以下用于读取和写入图像的函数。

OpenCV 读取函数

imread() 函数从指定文件加载图像并返回。语法是:

cv2.imread(filename[,flag])

参数:

filename:要加载的文件名

flag:该标志指定加载图像的颜色类型:

       IMREAD_UNCHANGED            = -1, //!<如果设置,返回加载的图像是(alpha通道,否则它将被裁剪)。忽略EXIF方IMREAD_GRAYSCALE            = 0,  //!<如果设置,始终将图像转换为单通道灰度图像(编解码器内部转换)。IMREAD_COLOR                = 1,  //!<如果设置,总是将图像转换为3通道BGR彩色图像。IMREAD_ANYDEPTH             = 2,  //!<如果设置,当输入有相应深度时返回16位/32位图像,否则转换为8位图像。IMREAD_ANYCOLOR             = 4,  //!<如果设置,图像将以任何可能的颜色格式读取。IMREAD_LOAD_GDAL            = 8,  //!<如果设置,使用gdal驱动程序加载图像。IMREAD_REDUCED_GRAYSCALE_2  = 16, //!<如果设置,始终将图像转换为单通道灰度图像,图像大小减小1/2。IMREAD_REDUCED_COLOR_2      = 17, //!<如果设置,总是将图像转换为3通道BGR彩色图像,图像大小减小1/2。IMREAD_REDUCED_GRAYSCALE_4  = 32, //!<如果设置,始终将图像转换为单通道灰度图像,图像大小减小1/4。IMREAD_REDUCED_COLOR_4      = 33, //!<如果设置,总是将图像转换为3通道BGR彩色图像,图像大小减小1/4。IMREAD_REDUCED_GRAYSCALE_8  = 64, //!<如果设置,始终将图像转换为单通道灰度图像,图像大小减小1/8。IMREAD_REDUCED_COLOR_8      = 65, //!<如果设置,总是将图像转换为3通道BGR彩色图像,图像大小减小1/8。IMREAD_IGNORE_ORIENTATION   = 128 //!<如果设置了,不要根据EXIF的方向标志旋转图像。

如果由于不支持的文件格式、缺少文件、不支持或无效格式而无法读取图像,则imread()函数返回一个矩阵。目前,支持以下文件格式。

窗口位图- *.bmp, *.dib
JPEG 文件- *.jpeg, *.jpg, *.jpe
便携式网络图形- *.png
便携式图像格式- *.pbm, *.pgm, *.ppm
TIFF 文件- * .tiff, *.tif

注意:彩色图像、解码图像的通道将按 BGR 顺序存储。

二、OpenCV 显示图像

imshow函数

imshow函数功能

imshow的函数功能也非常简单,名称也可以看出来,image show的缩写。imshow负责的就是将图片显示在窗口中,通过设备屏幕展现出来。

imshow函数原型

CV_EXPORTS void imshow(const String& winname, const ogl::Texture2D& tex);

参数:

  • 没有返回值
  • 参数1, 显示的窗口名,可以使用cv::namedWindow函数创建窗口,如不创建,imshow函数将自动创建
  • 需要显示的图像

三、OpenCV 保存图像

OpenCV imwrite()函数用于将图像保存到指定文件。文件扩展名定义图像格式。语法如下:

函数原型:
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>());

函数参数:

  • filename:需要保存图像的文件名,要保存图片为哪种格式,就带什么后缀。
  • img:要保存的图像。
  • params:表示为特定格式保存的参数编码。

IMWRITE_JPEG_QUALITY                //!对于JPEG,它的质量可以从0到100(越高越好)。缺省值为95。
IMWRITE_JPEG_PROGRESSIVE            //!<启用JPEG特征,0或1,默认为False。
IMWRITE_JPEG_OPTIMIZE               //!<启用JPEG特征,0或1,默认为False。
IMWRITE_JPEG_RST_INTERVAL           //!< JPEG重启间隔,0 - 65535,默认为0 -不重启。
IMWRITE_JPEG_LUMA_QUALITY           //!<单独的亮度质量等级,0 - 100,默认为0 -不使用。
IMWRITE_JPEG_CHROMA_QUALIT          //!<分离色度质量等级,0 - 100,默认为0 -不使用。
IMWRITE_PNG_COMPRESSION             //!<对于PNG,它可以是0到9之间的压缩级别。数值越高,压缩时间越长,大小越小。如果指定,strategy将更改为IMWRITE_PNG_STRATEGY_DEFAULT (Z_DEFAULT_STRATEGY)。默认值为1(最佳速度设置)。
IMWRITE_PNG_STRATEGY                //!< cv::ImwritePNGFlags之一,默认为IMWRITE_PNG_STRATEGY_RLE。
IMWRITE_PNG_BILEVEL                 //!<二进制级别PNG, 0或1,默认为0。
IMWRITE_PXM_BINARY                  //!<对于PPM, PGM或PBM,它可以是二进制格式标志,0或1。缺省值为1。
IMWRITE_EXR_TYPE                    //!< override EXR存储类型(默认为FLOAT (FP32))
IMWRITE_EXR_COMPRESSION             //!< override EXR压缩类型(ZIP_COMPRESSION = 3是默认值)
IMWRITE_WEBP_QUALITY                //!对于WEBP,它的质量可以从1到100(越高越好)。默认情况下(没有任何参数),如果质量高于100,则使用无损压缩。
IMWRITE_PAM_TUPLETYPE               //!<对于PAM,将TUPLETYPE字段设置为为该格式定义的相应字符串值
IMWRITE_TIFF_RESUNIT                //!<对于TIFF,用于指定要设置的DPI分辨率单位;有关有效值,请参阅libtiff文档
IMWRITE_TIFF_XDPI                   //!<对于TIFF,用于指定X方向DPI
IMWRITE_TIFF_YDPI                   //!<对于TIFF,用于指定Y方向DPI
IMWRITE_TIFF_COMPRESSION            //!<对于TIFF,用于指定图像压缩方案。有关压缩格式对应的整数常量,请参阅libtiff。注意,对于深度为CV_32F的图像,只使用libtiff的SGILOG压缩方案。对于其他支持的深度,压缩方案可以通过该标志指定;LZW压缩是默认的。
IMWRITE_JPEG2000_COMPRESSION_X1000  //!<对于JPEG2000,用于指定目标压缩率(乘以1000)。取值范围为0 ~ 1000。缺省值为1000。

返回值:如果imwrite() 函数返回 True,则表示文件成功写入指定文件。

注意:

imwrite函数是基于文件扩展名选择图像的格式。通常,使用此功能只能保存8位单通道或3通道(带有BGR通道顺序)图像,但有以下例外:

对于PNG,JPEG2000和TIFF格式,可以保存16位无符号(CV_16U)图像。
32位浮点(CV_32F)图像可以保存为PFM,TIFF,OpenEXR和Radiance HDR格式; 使用LogLuv高动态范围编码(每像素4个字节)保存3通道(CV_32FC3)TIFF图像
可以使用此功能保存带有Alpha通道的PNG图像。为此,创建8位(或16位)4通道图像BGRA,其中alpha通道最后。完全透明的像素应该将alpha设置为0,完全不透明的像素应该将alpha设置为255/65535。
如果格式,深度或通道顺序不同,请在保存之前使用Mat :: convertTo和cv :: cvtColor进行转换。或者,使用通用FileStorage I / O函数将图像保存为XML或YAML格式。

四、结果和代码

代码:

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/types_c.h>
using namespace cv;MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);Mat img=cv::imread("E:/1WT/18.OCR/1.Demo/OCRtest/test.bmp");imshow("Image", img);imwrite("save.jpg",img);qDebug()<<"1243";
}

结果:

QT+opencv【opencv学习篇】OpenCV 读取、显示和保存图像相关推荐

  1. OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并

    OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...

  2. 【youcans 的 OpenCV 例程 200 篇】112. 滤波反投影重建图像

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程 2 ...

  3. 【OpenCV 例程200篇】16. 不同尺寸的图像加法

    [OpenCV 例程200篇]16. 不同尺寸的图像加法 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 函数 cv2 ...

  4. 【OpenCV 例程 300 篇】112. 滤波反投影重建图像

    专栏地址:『youcans 的 OpenCV 例程 300篇 - 总目录』 [第 7 章:图像复原与重建] 110. 投影和雷登变换 111. 雷登变换反投影重建图像 112. 滤波反投影重建图像 [ ...

  5. matlab怎么输出图像文件夹,Matlab读取图片 显示和保存图像的相关操作

    当前有部份朋友还不清楚Matlab读取图片 显示和保存图像的操作,所以下面绿软吧就带来Matlab读取图片 显示和保存图像的相关操作,一起来看看吧! Matlab读取图片 显示和保存图像的相关操作 打 ...

  6. OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并

    OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...

  7. OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)

    需要源码和图片请点赞关注收藏后评论区留言私信~~~ OpenCV的作用在于让开发人员更容易地通过编码来处理图像.那么,处理图像需要执行哪些操作呢?图像处理的基本操作包含4个方面的内容:读取图像.显示图 ...

  8. OpenCV——图片的加载、显示、保存(python)

    本小节,我们将学习在Python语言中利用OpenCV库来实现图片的读取.显示.保存,所有的这些图片都是一个numpy.ndarray,这三种操作都过cv2.imread().cv2.imshow() ...

  9. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

最新文章

  1. R构建SVM回归模型
  2. 十三、冒泡排序算法及其优化
  3. Haar小波变换的快速实现
  4. boost::mpi::cartesian_topology相关用法的测试程序
  5. phpcms mysql配置文件_PhpCms系统设置:config.inc.php文件配置说明
  6. Java源码解析——Java IO包
  7. Saleor出现 Make sure you've added storefront address to ALLOWED_CLIENT_HOSTS
  8. RabbitMQ配置文件
  9. CentOS6.5下安装iRedMail中需要解决的问题
  10. 3月24 matlab函数polyfit(x,y,n)分析
  11. 频谱分析仪查看时域波形
  12. 单反相机的一般入门设置建议
  13. 联创宽带上网助手协议的简单分析(三):密码包的构造过程
  14. 嵌入式系统开发-麦子学院(12)——ARM Bootloader开发
  15. 希腊字母表(直接输入希腊字母的方法)
  16. 华为k662c的虚拟服务器,华为k662c光猫怎么样? 华为K662c拆机技巧
  17. 怎么在ppt中加入html5,怎样在PPT中插入html网页.ppt
  18. 1.MyBatis源码解析-XML解析流程--阿呆中二
  19. 【数学分析】Bolzano-Weierstrass定理及其证明(有界数列一定存在收敛子列)
  20. ArcGIS Enterprise 备份

热门文章

  1. Mac 下修改mysql密码
  2. webug4.0通关笔记---(第一天:布尔注入)
  3. 谢希仁计算机网络学习系列内容汇总
  4. java GUI (菜单设计)
  5. sharemouse切窗口就锁定了什么原因_有什么方法可以提高网球发球成功率
  6. 如何用Java语言打印出九九乘法表
  7. 2022-2028全球与中国汽车空调电动变换部件市场现状及未来发展趋势
  8. 为什么x86不叫x32?
  9. LMS自适应滤波算法的 matlab实现
  10. C#+AE调用ArcToolbox工具