图像入门OpenCV-Python

在图像处理过程中,读取图像、显示图像、保存图像是最基本的操作。

1、读取图像      

OpenCV 提供了函数cv2.imread()来读取图像,该函数支持各种静态图像格式。该函数的语法格式为:

Retval = cv2.imread(path_of_image, intflag)

式中:

  1. Retval 是返回值,其值是读取到的图像。如果未读取到图像,则返回“None”。
  2. path_of_image表示要读取的图像的完整文件名。
  3. intflag是读取标记。该标记用来控制读取文件的类型,具体如表1 所示。表1 中的第一列参数与第三列数值是等价的。例如cv2.IMREAD_UNCHANGED=1,在设置参数时,既可以使用第一列的参数值,也可以采用第三列的数值。

表1 flags标记值

含义

数值

cv2.IMREAD_UNCHANGED

保持原格式不变

-1

cv2.IMREAD_GRAYSCALE

将图像调整为单通道的灰度图像

0

cv2.IMREAD_COLOR

将图像调整为 3 通道的BGR 图像。该值是默认值

1

cv2.IMREAD_ANYDEPTH

当载入的图像深度为 16 位或者32 位时,就返回其对应的深度图像;否则,将其转换为8 位图像

2

cv2.IMREAD_ANYCOLOR

以任何可能的颜色格式读取图像

4

cv2.IMREAD_LOAD_GDAL

使用 gdal 驱动程序加载图像

8

cv2.IMREAD_REDUCED_GRAYSCALE_2

将图像转换为单通道灰度图像,并将图像尺寸减小 1/2

cv2.IMREAD_REDUCED_COLOR_2

将图像转换为 3 通道BGR 彩色图像,并将图像尺寸减小1/2

cv2.IMREAD_REDUCED_GRAYSCALE_4

始终将图像转换为单通道灰度图像,并将图像尺寸减小为原来的1/4

cv2.IMREAD_REDUCED_COLOR_4

将图像转换为 3 通道BGR 彩色图像,并将图像尺寸减小为原来的1/4

cv2.IMREAD_REDUCED_GRAYSCALE_8

将图像转换为单通道灰度图像,并将图像尺寸减小为原来的1/8

cv2.IMREAD_REDUCED_COLOR_8

将图像转换为 3 通道BGR 彩色图像,并将图像尺寸减小为原来的1/8

cv2.IMREAD_IGNORE_ORIENTATION

不以 EXIF 的方向为标记旋转图像

函数 cv2.imread()能够读取多种不同类型的图像,具体如表2 所示。

表2 cv2.imread()函数支持的图像格式

图像

扩展名

Windows 位图

*.bmp、*.dib

JPEG 文件

*.jpeg、*.jpg、*.jpe

JPEG 2000 文件

*.jp2

便携式网络图形(Portable Network Graphics,PNG)文件

*.png

WebP 文件

*.webp

便携式图像格式(Portable Image Format)

*.pbm、*.pgm、*.ppm、*.pxm、*.pnm

Sun(Sun rasters)格式

*.sr、*.ras

TIFF 文件

*.tiff、*.tif

OpenEXR 图像文件

*.exr

Radiance 格式高动态范围(High-Dynamic Range,HDR)成像图像

*.hdr、*.pic

GDAL 支持的栅格和矢量地理空间数据

Raster、Vector 两大类

例如,想要读取当前目录下文件名为example_img.bmp 的图像,并保持按照原有格式读入,则使用的语句为:

 Img = cv2.imread("example_img.bmp", -1) 

即使图像路径错误,它也不会引发任何错误,但是print img 会给出None。需要注意,上述程序要想正确运行,首先需要导入cv2模块,大多数常用的OpenCV函数都在cv2模块内。

2、显示图像 

OpenCV 提供了函数 cv2.imshow()用来显示图像,其语法格式为:

None = cv2.imshow( winname, mat )

式中:

  1. winname 是窗口名称,它是一个字符串
  2. mat 是要显示的图像。

你可以根据需要创建任意多个窗口,但可以使用不同的窗口名称。

例如,在一个窗口内显示读取的图像,代码如下:

import cv2 as cv
img = cv.imread('example_img.bmp', 0) # 加载彩色灰度图像
cv.imshow("lesson", img)
cv.waitKey()

在本程序中,首先通过cv2.imread()函数读取图像example_img.bmp,接下来通过cv2.imshow()函数在窗口lesson内显示图像example_img.bmp。

需要注意,上述程序要想正确运行,首先需要导入函数 cv2.waitKey(),该函数用来等待按键,当用户按下键盘后,该语句会被执行,并获取返回值。其语法格式为:

retval = cv2.waitKey( [delay] )

式中:

  1. retval 表示返回值。如果没有按键被按下,则返回−1;如果有按键被按下,则返回该按键的ASCII 码。
  2. delay 表示等待键盘触发的时间,单位是ms。当该值是负数或者零时,表示无限等待。该值默认为0。

在实际使用中,可以通过函数cv2.waitKey()获取按下的按键,并针对不同的键做出不同的反应,从而实现交互功能。

从另外一个角度理解,该函数还能够让程序实现暂停功能。当程序运行到该语句时,会按照参数delay 的设定等待特定时长。根据该值的不同,可能有不同的情况:

  1. 如果参数 delay 的值为0,则程序会一直等待。直到有按下键盘按键的事件发生时,才会执行后续程序。
  2. 如果参数delay 的值为一个正数,则在这段时间内,程序等待按下键盘按键。当有按下键盘按键的事件发生时,就继续执行后续程序语句;如果在delay 参数所指定的时间内一直没有这样的事件发生,则超过等待时间后,继续执行后续的程序语句。

在本例中,由于cv2.waitKey()函数的参数值是默认值0,所以在未按下键盘上的按键时,程序会一直处于暂停状态。当按下键盘上的任意一个按键时,程序中cv2.waitKey()下方的语句便得以执行,直到程序执行完终止。

3、保存图像 

OpenCV 提供了函数cv2.imwrite(),用来保存图像,该函数的语法格式为:

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

式中:

  1. retval 是返回值。如果保存成功,则返回逻辑值真(True);如果保存不成功,则返回逻辑值假(False)。
  2. filename 是要保存的目标文件的完整路径名,包含文件扩展名。
  3. img 是被保存图像的名称。
  4. params 是保存类型参数,是可选的。

 例如,将读取的图像保存到img目录下,代码如下:

import cv2 as cv
img = cv.imread('example_img.bmp', 0) # 加载彩色灰度图像
ret = cv.imwrite('img/result.bmp', img)

 上述程序会先读取图像example_img.bmp,生成它的一个副本图像,然后将该图像以名称result.bmp 存储到img目录下。

猜你喜欢

转载自blog.csdn.net/weixin_43737866/article/details/129833652