展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

图像读取

  • 读取图像
import cv2 #opencv的缩写为cv2
import matplotlib.pyplot as plt # matplotlib库用于绘图展示
import numpy as np   # numpy数值计算工具包

# 魔法指令,直接展示图,Jupyter notebook 特有
%matplotlib inline

img = cv2.imread('01_Picture/01_cat.jpg') 
print(type(img)) # img 的类型为 numpy.ndarray 类型
img              # uint8 的取值范围在 0-255 之间
  • 执行结果
<class 'numpy.ndarray'>

array([[[142, 151, 160],
        [146, 155, 164],
        [151, 160, 169],
        ..., 
        [156, 172, 185],
        [155, 171, 184],
        [154, 170, 183]],

       [[107, 118, 126],
        [112, 123, 131],
        [117, 128, 136],
        ..., 
        [155, 171, 184],
        [154, 170, 183],
        [153, 169, 182]],

       [[108, 119, 127],
        [112, 123, 131],
        [118, 129, 137],
        ..., 
        [154, 170, 183],
        [153, 169, 182],
        [152, 168, 181]],

       ..., 
       [[162, 186, 198],
        [157, 181, 193],
        [142, 166, 178],
        ..., 
        [181, 204, 206],
        [170, 193, 195],
        [149, 172, 174]],

       [[140, 164, 176],
        [147, 171, 183],
        [139, 163, 175],
        ..., 
        [167, 187, 188],
        [123, 143, 144],
        [104, 124, 125]],

       [[154, 178, 190],
        [154, 178, 190],
        [121, 145, 157],
        ..., 
        [185, 198, 200],
        [130, 143, 145],
        [129, 142, 144]]], dtype=uint8)
  • 显示图像
# opencv 默认读取格式是 BGR 格式,matplotlib 或其他库的读取格式可能是 RGB 的
# opencv 读取并用 opencv 自带的展示函数不需要进行通道转换,但 opencv 读取后用其他库展示图片需要通道转换    

# 图像显示时,可以创建多个窗口

# 第一个入口参数为展示图像窗口的名字
# 第二个入口参数为展示图像窗口中所展示的图像
img = cv2.imread('01_Picture/01_cat.jpg') 
cv2.imshow('image_cat',img)  

# 等待时间,毫秒级,0表示任意键终止,5000ms表示5s
cv2.waitKey(5000)  

# 销毁图像窗口
cv2.destroyAllWindows()
  • 执行结果

  • 封装方法

# 绘图显示(封装函数)
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
cv_show('image_cat',img)
  • 读取BGR
import cv2 #opencv的缩写为cv2
import matplotlib.pyplot as plt # matplotlib库用于绘图展示
import numpy as np   # numpy数值计算工具包

# 魔法指令,直接展示图,Jupyter notebook特有
%matplotlib inline  

img = cv2.imread('01_Picture/01_cat.jpg') 
img.shape # (h,w,c) c表示 3 通道,这个 3 通道被 opencv 读进来是 BGR 的先后顺序的 3 通道  
  • 执行结果
(414, 500, 3)
  • 读取灰度图
img_gray = cv2.imread('01_Picture/01_cat.jpg',cv2.IMREAD_GRAYSCALE)    
#img_gray = cv2.imread('01_Picture/01_cat.jpg',cv2.IMREAD_COLOR)  # BGR图  
img_gray  # 只有一个通道,同样是 uint8 类型
  • 执行结果
array([[153, 157, 162, ..., 174, 173, 172],
       [119, 124, 129, ..., 173, 172, 171],
       [120, 124, 130, ..., 172, 171, 170],
       ..., 
       [187, 182, 167, ..., 202, 191, 170],
       [165, 172, 164, ..., 185, 141, 122],
       [179, 179, 146, ..., 197, 142, 141]], dtype=uint8)
  • 查看属性
print('type(img_gray):',type(img_gray))
print('img_gray.size: ',img_gray.size)  # 414 × 500 = 20700
print('img_gray.dtype:',img_gray.dtype)
print('img_gray.shape:',img_gray.shape) # 只有一个通道
  • 执行结果
type(img_gray): <class 'numpy.ndarray'>
img_gray.size:  207000
img_gray.dtype: uint8
img_gray.shape: (414, 500)
  • 显示图片
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
cv_show('image_cat_gray',img_gray)

# 保存图片
cv2.imwrite('01_Picture/02_cat_gray.jpg',img_gray) 
  • 执行结果

  • HSV颜色空间

# H - 色调(主波长)。
# S - 饱和度(纯度/颜色的阴影)。
# V - 强度

import cv2 #opencv的缩写为cv2
import matplotlib.pyplot as plt # matplotlib库用于绘图展示
import numpy as np   # numpy数值计算工具包

# 魔法指令,直接展示图,Jupyter notebook特有
%matplotlib inline   

hsv = cv2.imread('01_Picture/01_cat.jpg', cv2.COLOR_BGR2HSV) 
cv2.imshow('hsv',hsv)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 执行结果
posted @ 2024-02-21 10:05  DogLeftover  阅读(22)  评论(0)    收藏  举报