OpenCV(2):图像的读取、显示和保存

图像分为静态图像,如图片、照片等,和动态视频,如视频等两种。

与图像相关的操作包括图像采集图像制作图像分析图像处理等。

2.1  图像的读取 cv2.imread()

原型:cv2.imread(filename, flage)

参数:

  1. filename 图像文件名
  2. flage 加载标识
  • cv2.IMREAD_COLOR : 默认使用该种标识。加载一张彩色图片,忽视它的透明度。
  • cv2.IMREAD_GRAYSCALE : 加载一张灰度图。
  • cv2.IMREAD_UNCHANGED : 加载图像,包括它的Alpha通道

同时,上面三个参数可以分别用1,0,-1代替。

灰度图的作用很大,在很多图像检测识别中,我们都需要将彩色图转换为灰度图,再进行相应的图像处理

简单代码如下:

import cv2  
import matplotlib.pyplot as plt
import numpy as np

### imread()读取图像  Opencv读取的格式是BGR
img = cv2.imread('C:\\Users\\xxx\\Downloads\\picture1.jpeg')
print(img.shape)
img = cv2.imread('C:\\Users\\xxx\\Downloads\\picture1.jpeg',0)
print(img.shape)
img = cv2.imread('C:\\Users\\xxx\\Downloads\\picture1.jpeg',-1)
print(img.shape)

2.2 图像的显示

2.2.1 cv2.imshow() 在指定窗口显示图像

作用:该函数将图像在特定的窗口进行显示。如果该窗口是利用cv::WINDOW_AUTOSIZE标志创建的,则会使用图像的原始分辨率进行显示,然而会受限于屏幕的分辨率。也就是如果图像大于屏幕的分辨率,则无法完整的查看了。

原型:cv2.imshow(winname, mat)

参数:

  1. winname 窗口名。如果窗口名为winname的窗口不存在,则自动创建窗口
  2. mat 要显示的图像数据矩阵

2.2.2 cv2.moveWindow() 移动窗口

作用:该函数的作用是将窗口放到指定的位置去

原型:cv2.moveWindow(winname, x, y)

参数:

  1. winname 窗口名
  2. x、y 指窗口的左上角在屏幕的坐标

2.2.3 cv2.namedWindow() 命名窗口

作用:创建窗口。如果已经存在相同的窗口名称之后,该函数将会不做任何事情。

原型:cv2.namedWindow(   winname[, flags])

参数:

  1. winname 窗口名
  2. flags 标志位
  1. cv2.WINDOW_NORMAL: 使得你能够改变窗口的尺寸
  2. cv2.WINDOW_AUTOSIZE:  会自适应图像的尺寸(默认)。
  3. 上面2个参数可以分别用0,1代替。

2.2.4 cv2.waitkey() 等待函数

原型:cv2.waitkey(delay)

参数:delay 延时的时间。单位ms。

返回值:若在给定延时内有按键触发,则返回键值。没有键盘输入,则返回-1.

作用

  1. cv2.waitKey()是一个键盘绑定函数。它的时间量度是毫秒ms。函数会等待(delay)毫秒,看是否有键盘输入。若有键盘输入,则返回按键的ASCII值。没有键盘输入,则返回-1.一般设置为0,他将无线等待键盘的输入。
  • 一般在 imshow() 的时候 , 如果设置 waitkey(0) , 代表按任意键继续。
  • 显示视频时,延迟时间需要设置为 大于0的参数。delay > 0时 , 延迟 ”delay”ms , 在显示视频时这个函数是有用的 , 用于设置在显示完一帧图像后程序等待 ”delay”ms 再显示下一帧视频 ; 如果使用 waitkey(0) 则只会显示第一帧视频

2.2.5 cv2.destroyAllWindows() 删除窗口

原型:cv2.destroyAllWindows([winname])

参数winname 窗口名。不指定任何参数,则删除所有窗口;指定参数,则删除特定的窗口winname。

示例:
import cv2 
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('C:\\Users\\xxx\\Downloads\\picture1.jpeg')  # 彩色图
img1 = cv2.imread('C:\\Users\\xxx\\Downloads\\picture1.jpeg',0) #灰度图
cv2.namedWindow('picture1',0) #创建一个能改变大小的窗口
cv2.imshow('picture',img)  #显示图像,窗口不存在,就自动创建
cv2.imshow('picture1',img1) #显示图像,在已存在的窗口
cv2.waitKey(0)             #按任意键
cv2.moveWindow('picture',0,0) # 将窗口移动至屏幕左上方
cv2.waitKey(0)             #按任意键
cv2.destroyAllWindows()    #删除所有窗口

运行结果如下:

为了避免每显示一个图像敲多行代码,我们可以定义一个函数cv_show(name,img),如下:

# 定义显示图像函数
def cv_show(name,img):
    '''
    参数:
      name 窗口名
      img  图像数据的矩阵
    '''
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

2.2.6 图像深度:就是图像的数据类型。

在定义图像数据时,可以指定图像的深度(即数据类型),如下例:

import numpy as np
import cv2

# 【图像深度为CV_8U,或者numpy数据类型为uint8】
#  新建numpy数组,注意np.zero()创建的数据类型为float64,所以先转化为uint8

type = ['uint8','uint16','float32','float64']

for dType in type:
    # 新建numpy数组,注意np.zero()创建的数据类型为float64,所以先转化为对应的数据类型
    img = np.zeros((500,500,3)).astype(dType)
    # openCV显示图像为BGR格式,通过下列方式,我们绘制两条粗红线
    if dType == 'uint8':
        img[150:170,150:350]=[0,0,100]
        img[350:370,150:350]=[0,0,255] 
    if dType == 'uint16':
        img[150:170,150:350]=[0,0,25600]
        img[350:370,150:350]=[0,0,65525]  
    if dType == 'float32' or dType == 'float64':
        img[150:170,150:350]=[0,0,-8000]
        img[250:270,150:350]=[0,0,8000]
        img[350:370,150:350]=[0,0,0.34]
    winName = 'Type: ' + dType
    cv2.imshow(winName,img)   
cv2.waitKey() 
cv2.destroyAllWindows()

运行结果如下:

说明:

  1. 当cv2.imshow()处理图像深度为:CV_8U(默认范围为[0,255])时,按原数据显示;
  2. 当cv2.imshow()处理图像深度为CV_16U(默认范围为[0,65535])时,除以256,映射到[0,255];
  3. 当cv2.imshow()图像深度为CV_32FCV_64F时(默认范围为[0,1]),乘以255映射到[0,255];当碰到负数时,首先取其绝对值,然后按照上述图像深度将超出数据范围的部分采取截断操作,最后映射到[0,255]显示图像;

2.3  图像的保存 cv2.imwrite()

原型:retval = cv2.imwrite(filename, image [, paras])

参数:

  1. filename:代表文件名的字符串。文件名必须包含图像格式,例如.jpg,.png等。
  2. image:图像数据矩阵
  3. paras: 不同编码格式的参数,可选项
  • cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;
  • cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;
  • cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。

返回值:retval。返回值,保存成功返回 True,否则返回 False。

示例

import cv2 
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('C:\\Users\\xxx\\Downloads\\picture1.jpeg',cv2.IMREAD_GRAYSCALE) #灰度图
cv2.imwrite('picture1.png',img)   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值