Opencv的图片读取,显示,保存是图片操作的基础,实验用的图片来自于lenan:http://www.lenna.org/

为了使用方

便,主要是使用opencv的python版本的接口,其官网链接为http://docs.opencv.org/

Read an image

opencv读取图片API为cv.read,其API原型为:

retval   =  cv.imread(  filename[, flags]   )

参数意义:

filename: 必选项,为要读取到的图片文件名,包括其文件所在的路径

flags:可选项,默认为cv.IMREAD_COLOR,该参数主要为要读取到的图片方式,经常用到的主要由以下几个选项

Flags Description
cv.IMREAD_COLOR 读取其彩色图片,为RGB通道,其值为1
cv.IMREAD_GRAYSCALE 读取灰色图,单通道,其值为0
cv.IMREAD_UNCHANGED 除了读取彩色图片外,还包括alpha通道,其值为-1

目前,opencv imread支持的图片名后缀格式:

  • Windows bitmaps - *.bmp, *.dib (always supported)
  • JPEG files - *.jpeg, *.jpg, *.jpe (see the Note section)
  • JPEG 2000 files - *.jp2 (see the Note section)
  • Portable Network Graphics - *.png (see the Note section)
  • WebP - *.webp (see the Note section)
  • Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
  • PFM files - *.pfm (see the Note section)
  • Sun rasters - *.sr, *.ras (always supported)
  • TIFF files - *.tiff, *.tif (see the Note section)
  • OpenEXR Image files - *.exr (see the Note section)
  • Radiance HDR - *.hdr, *.pic (always supported)
  • Raster and Vector geospatial data supported by GDAL (see the Note section)

其用例如下:

import numpy as np
import cv2 as cvimg = cv.imread(".././datasheet/len_top.jpg",cv.IMREAD_COLOR)
cv.imshow('lenna',img)

读取图片的C++接口如下,和python接口类似:


Mat cv::imread  (const String &     filename,int    flags = IMREAD_COLOR ) 

返回为Mat, flags参数列表如下:

flags Description
IMREAD_UNCHANGED = -1 按照原图进行加载,不做任何改变
IMREAD_GRAYSCALE = 0 将图片按照单通道灰度图进行加载,加载结果为单通道灰度值
IMREAD_COLOR = 1 将图片按照BGR3通道进行加载,加载结果为彩色三通道
IMREAD_ANYDEPTH = 2 读取其深度图片,个人理解是可以读取16位或者32位图片,与输入的原图位数一致
IMREAD_ANYCOLOR = 4 读取原图为任意彩色图模式
IMREAD_LOAD_GDAL = 8 使用gdal驱动程序加载图像(暂时不知道又何用处,做了下实验如果是彩色图,加载出来的mat是多通道)
IMREAD_REDUCED_GRAYSCALE_2 = 16 将图片加载为灰度图,且图像长和宽为分别为原图的1/2
IMREAD_REDUCED_COLOR_2 = 17 将图片按照BGR3通道进行加载,且图像长和宽为分别为原图的1/2
IMREAD_REDUCED_GRAYSCALE_4 = 32 将图片加载为灰度图,且图像长和宽为分别为原图的1/4
IMREAD_REDUCED_COLOR_4 = 33 将图片按照BGR3通道进行加载,且图像长和宽为分别为原图的1/4
IMREAD_REDUCED_GRAYSCALE_8 = 64 将图片加载为灰度图,且图像长和宽为分别为原图的1/8
IMREAD_REDUCED_COLOR_8 = 65 将图片按照BGR3通道进行加载,且图像长和宽为分别为原图的1/8
IMREAD_IGNORE_ORIENTATION = 128 不以EXIF的方向旋转图像

对上述flags的值划分理解可以参考下面的一篇博客:

https://blog.csdn.net/ruibin_cao/article/details/80312799

Display an image

将图片加载到内存后,在程序运行过程中经常需要调试,图片无法想其他的程序打印debug信息,但是在调试过程中经常需要查看算法的效果,把图片显示出来,这就需要用到图片的显示功能,opencv中图片显示使用cv.imshow()可以直接把图片显示到屏幕上,其API接口为:

None =  cv.imshow(  winname, mat    )

参数
        winname:必选项,为显示图片的windows窗口的title

mat:为使用imread读取到的图片到mat数据结构中

一般在使用cv.imshow之后,需要使用cv.waitKey()其参数为毫秒,在多少毫秒之内等待敲入一个键盘,超时或者在时间之内按下一个键盘,程序将继续往前走,经常用到cv.imshow之后,用于观察图片算法之后的效果,waitkey(0)表示为无限等待,只有敲入一个键盘之后才能往下走, waitKey返回的值就是所敲入键盘的ascii的值。

注意在处理完之后需要使用cv.destroyAllWindows将创建的窗口销毁。

示范用例:

cv.imshow('lenna',img)
cv.waitKey(0)
cv.destroyAllWindows()

其C++接口类似:


void cv::imshow (const String &     winname,InputArray  mat )   

Write an image

保存图片是图像处理中经常用到的,其API原型为:

retval   =  cv.imwrite( filename, img[, params] )

filename:为要保存的文件名(可以带路径)

img:图片数据

其C++接口为:

bool cv::imwrite (   const String &  filename,InputArray     img,const std::vector< int > &    params = std::vector< int >() )      
  • JPEG格式的图片, param参数表示为从0到100的图片质量,默认为95
  • 对于PNG格式的图片,这个参数表示为压缩级别从0到9。较高的值意味着更小的尺寸和更长的压缩时间,默认值是3
  • 对于PPM,PGM或PBM格式图片,这个参数表示一个二进制格式标志,取值为0或1,默认值是1.

一个完整的读取,显示,保存图片用例:

import numpy as np
import cv2 as cvimg = cv.imread(".././datasheet/len_top.jpg",cv.IMREAD_COLOR )
cv.imshow('lenna',img)
cv.waitKey(0)
cv.destroyAllWindows()
cv.imwrite('save.png',img)

读取到的图片:

Opencv 图片 读取,显示,保存基本操作相关推荐

  1. opencv之中英文路径图片读取与保存

    opencv之中英文路径图片读取与保存 关于如何用opecncv读取和写入图片网上已经有很多教程,这里只是记录一下,用的时候方便查找. 1.opencv读写英文路径图片 使用函数imread()和im ...

  2. OpenCV基础操作_图片读取和保存

    目录 1 图片读取 2 图片保存 1 图片读取 在OpenCV中,加载图片采用imread()函数. 函数详细说明在:Reading and Writing Images and Video - Op ...

  3. opencv 图片读取和视频读取(一)

    环境搭建 一 图片读取 1代码 import cv2 as cv #读取图片 src=cv.imread('./yiner.jpg') #cv.WINDOW_AUTOSIZE 表示自动窗口 cv.na ...

  4. 【机器学习入门笔记2:OpenCV图片读取和展示】20190203

    2019-02-03  by 崔斐然 #思路:1.引入OpenCV 2.调用API 3.程序stopimport cv2 #1.文件的读取 2.封装格式解析 3.数据解码 4.数据加载#[1:文件名 ...

  5. python实现cv2图片读取显示及图片不显示或显示不全的问题分析

    cv2相关知识初步学习 python图片操作之opencv 图片读入 图片显示 图片不能显示的问题 图片只显示一小部分 声明 python图片操作之opencv OpenCV是一个基于BSD许可(开源 ...

  6. 用c语言实现存储和读取图片文件,C++实现单张图片读取和保存

    使用C++实现对单张图片的读取和保存,C语言可以参考,比较简单. #include using namespace std; void main(void) { //保存输入图像文件名和输出图像文件名 ...

  7. ZYNQ-使用HDMI显示器进行SD卡图片读取显示

    学习内容 本文使用带有HDMI接口的显示器,构建图像视频显示的测试工程,利用VDMA进行传输图像视频数据,通过文件系统将SD卡中的照片读取出来然后在显示器显示. 开发环境 vivado 18.3&am ...

  8. HALCON教程-初步:文件夹遍历,文件筛选,文件名拆分,图片读取及保存

    [1]文件夹遍历 list_image_files ( : : ImageDirectory, Extensions, Options : ImageFiles) ImageDirectory: 文件 ...

  9. 【OpenCV】读取显示图片及Mat类

    前言   继Matlab后,OpenCV成了最近这段时间的主攻学习目标.本科有学过一阵OpenCV,也做过项目,但整体学习不够系统,部分知识也遗忘,再加上OpenCV加入了许多新的内容,故重拾Open ...

最新文章

  1. 「杂谈」白身,初识,不惑,有识,你处于深度学习哪一重境界了
  2. 超级干货丨优美的课程笔记,吴恩达点赞的深度学习课程信息图
  3. ARM、Intel、MIPS处理器的区别
  4. Django学习(一)
  5. C语言库函数大全及应用实例十四
  6. 五大板块(5)——字符串
  7. 工作174:数组转换为对象项目案例
  8. 微信更新对html影响,微信再次大更新 将极大影响用户使用习惯
  9. linux 下软READ 的使用和参数 以及 实现虚拟READ步骤
  10. boost::factory实现对象工厂设计模式
  11. 【医疗影像处理】antspy数据读取与保存
  12. linux5分钟打印一次的脚本,centos7中crontab定时计划任务5分钟一次命令写法
  13. 第7章 EL表达式和JSTL
  14. 等级保护三级和二级有什么区别?
  15. ABP框架的理解和总结
  16. JS验证邮箱格式、信用码、税号和注册号
  17. iOS生成推送push证书,push.p12文件
  18. There appears to be a gap in the edit log. We expected txid 2289, but got txid 2859.
  19. 这16道题都能答上来?恭喜你,90%的面试都能通过!
  20. 跨境电商如何做好引流?做亚马逊速卖通独立站的看过来

热门文章

  1. 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX
  2. 【版本发布】Jeecg-P3 1.0 发布,J2EE微服务框架(插件开发)
  3. 为什么需要MiniDao? 新持久层 3.5.1 版本发布,让hibernate跟mybatis一样灵活
  4. 开发指南专题十:JEECG微云快速开发平台--表单校验组件ValidForm
  5. 稀疏表示字典的显示【MATLAB实现】
  6. treeSet中对象的比较
  7. Python 获取系统信息模块psutil(转载)
  8. 结合DvaJS来写小程序
  9. 报表如何同步用户数据集
  10. 背包形动态规划 fjutoj2375 金明的预算方案