图像读写、属性


一、图像读写

1、读取 imread

imread(filename[, flags]) -> retval
flags 相关参数

  • cv2.IMREAD_COLOR:彩色图像

  • cv2.IMREAD_GRAYSCALE:灰度图像

  • 0,8位深度,1通道;

  • 1,8位深度,3通道;

  • 2,原深度,1通道

  • 3,原深度,3通道;

  • 4,8位深度,3通道;

  • -1,8位深度,原通道;

无论哪种模式, imread 会删除透明通道(alpha 通道);


import cv2 # opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np 
%matplotlib inline 

# 读取
img=cv2.imread('dj.jpg')


读取为灰度图

# 设置读取方式为灰度图
img=cv2.imread('dj.jpg', cv2.IMREAD_GRAYSCALE)

 
img.shape  # (H, W)
#  (200, 200)
 

img
array([[64, 64, 64, ..., 87, 87, 87],
           [64, 64, 64, ..., 87, 87, 87],
           [64, 64, 64, ..., 87, 87, 87],
           ...,
           [62, 62, 62, ..., 83, 83, 83],
           [62, 62, 62, ..., 82, 83, 83],
           [62, 62, 62, ..., 82, 83, 83]], dtype=uint8)

img1=cv2.imread('dj.jpg', 0)  # 设置为0,代表读取为单通道

2、保存 imwrite

imwrite(filename, img[, params]) -> retval

  • filename:文件名字
  • retval 返回布尔值,表示存储成功与否
ret = cv2.imwrite('hi.jpg' ,img)
print(ret)

3、展示 imshow

imshow 查看

imshow(winname, mat) -> None

  • winname:给显示窗口取的名字
  • mat:读取出来的图像举证

如果只是 imshow,则会一闪而过;
设置 waitKey 等待时间,显示图片延迟时间,以 ms 为单位;设置为 0,表示不消失,让用户操作任意键来终止;

cv2.waitKey(2000) # 2s 内消失

waitKey 有返回值,返回任意键的 ascii 编码值;
如果指定时间内没有按下任何按键,程序继续执行;

也可以创建多个窗口;
Mac 上窗口可能在后方;


# 图像的显示,
cv2.imshow('title',img) 

# 等待时间,毫秒级,0表示任意键终止
# cv2.waitKey(0) 
ret = cv2.waitKey(2000) # 2s 内消失
print(ret)
cv2.destroyAllWindows()
# 封装方法来显示图片
def cv_show(img):
    cv2.imshow('w name',img) 
    cv2.waitKey(0) 
    cv2.destroyAllWindows()
#图像的显示,也可以创建多个窗口
cv2.imshow('image',img) 

# 等待时间,毫秒级,0表示任意键终止
cv2.waitKey(10000) 
cv2.destroyAllWindows()

4、图片属性

图片读取后本质是矩阵;灰度图是二维,彩色图是三维


img.size  # 像素点的个数
img
array([[[ 53,  52,  91],
        [ 53,  52,  91],
        [ 53,  52,  91],
        ...,
       [[ 51,  50,  89],
        [ 51,  50,  89],
        [ 51,  50,  89],
        ...,
        [ 66,  66, 120],
        [ 67,  67, 121],
        [ 67,  67, 121]]], dtype=uint8)
img.shape
 # (200, 200, 3)
height, width, n = img.shape
print(height, width, n)
# 200 200 3
type(img)
# numpy.ndarray

img[0][0]
# array([53, 52, 91], dtype=uint8)

type(img) 
img.dtype # 数据类型

二、视频读取

视频也是由图像组成的;是一帧一帧静止的图像组成的;
读取视频文件后,还是会拆分为每一帧,对每一帧做操作。

  • cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
  • 如果是视频文件,直接指定好路径即可。
vc = cv2.VideoCapture('djm.mp4')
# 检查是否打开正确
if vc.isOpened(): 
    open, frame = vc.read() 
    # open 代表是否能打开;frame 代表当前这一帧的图像 ;vc.read() 一次读取一帧
else:
    open = False 

# 遍历每一帧
while open: 
    ret, frame = vc.read() 
    if frame is None:
        break 
    if ret == True: 
        gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY) # 转化为灰度图
        cv2.imshow('result', gray)
        # 每等 100ms 下一帧;27 表示退出键;
        if cv2.waitKey(100) & 0xFF == 27:
            break
            
vc.release()
cv2.destroyAllWindows()
posted @ 2021-02-04 10:03  月思  阅读(124)  评论(0编辑  收藏  举报