Opencv 图片 读取,显示,保存基本操作

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,该参数主要为要读取到的图片方式,经常用到的主要由以下几个选项

FlagsDescription
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 cv

img = 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参数列表如下:

 

flagsDescription
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 cv

img = cv.imread(".././datasheet/len_top.jpg",cv.IMREAD_COLOR )
cv.imshow('lenna',img)
cv.waitKey(0)
cv.destroyAllWindows()
cv.imwrite('save.png',img)

读取到的图片:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huo的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值