Skip to content

Latest commit

 

History

History
177 lines (129 loc) · 3.67 KB

599-1189939-图片文件的结构.sy.md

File metadata and controls

177 lines (129 loc) · 3.67 KB
show version enable_checker
step
1.0
true

opencv

回忆

  • 上次安装了opencv
    • 并且打开了图片
    • 查看了图片
    • 还另存了图片
  • 图片的本质是什么呢?
  • 为什么输出的时候会输出一个三维数组呢?🤔

新图像

firefox ~/monkey.png

图片描述

  • 这是一副新的png图素材
  • 能否看到图片的形状信息呢?

重复上次

import cv2 
image = cv2.imread("/home/shiyanlou/monkey.png")
print(image)
  • 运行结果

图片描述

  • 能否看到这个三维列表的维度呢?

观察维度

import cv2
image = cv2.imread("/home/shiyanlou/monkey.png")
print(image.shape)
  • 运行得到一个三元组

图片描述

  • 这三个变量是什么呢?

图片细节

  • 图片大小是400*356
  • 图片是RGB色彩存储的

图片描述

  • 三元组对应着
    • 高度
    • 宽度
    • 通道数

将元组赋值

import cv2
image = cv2.imread("/home/shiyanlou/monkey.png")
height, width, channels = image.shape
print("height====",height)
print("width====",width)
print("channels====",channels)
  • 运行结果

图片描述

  • 这三项构成了图像的size
  • 可以直接输出size吗?

size

import cv2
image = cv2.imread("/home/shiyanlou/monkey.png")
height, width, channels = image.shape
print("height====",height)
print("width====",width)
print("channels====",channels)
size = image.size
print("size====",height,"*",width,"*",channels,"=",size)
  • 图像大小如下图

图片描述

  • 每个通道由什么数据类型来构建呢?

dtype

import cv2
image = cv2.imread("/home/shiyanlou/monkey.png")
height, width, channels = image.shape
print("height====",height)
print("width====",width)
print("channels====",channels)
size = image.size
print("size====",height,"*",width,"*",channels,"=",size)
dtype = image.dtype
print("dtype=====",dtype)
  • 结果

图片描述

  • 每个通道用的是8-bit的unsigned int类型
  • 可以把RGB三元组的颜色降维成
    • 单一数值的灰度图吗?

降维

  • 改变图片色彩模式
    • 从RGB转化为灰度
import cv2    
rgbImg = cv2.imread("/home/shiyanlou/monkey.png")
grayImg=cv2.cvtColor(rgbImg,cv2.COLOR_BGR2GRAY)
cv2.imshow("grayImg", grayImg)
cv2.imwrite('/home/shiyanlou/gray_img.jpg', grayImg)                                          
if cv2.waitKey(0)==27:
    cv2.destroyAllWindows()
  • 并且指定按下esc键时退出

图片描述

  • 确实变成灰色了
  • 列表降维了吗?

查看图片像素信息

import cv2
image = cv2.imread("/home/shiyanlou/gray_img.jpg")
print(image)
  • 运行结果

图片描述

  • 结果还是三元组
    • 只不过RGB三个分量的数值都是相等的
  • 表面上是灰色图
    • 本质上还是RGB色彩模式
  • 真正的灰度图是否会降维呢?

总结

  • 我们这次研究了图像的shape
    • 高度
    • 宽度
    • 通道数
  • 并且把图像从RGB色彩模式修改为灰度色彩模式
    • 结果仍然是三维列表
  • 真正的灰度图也是三维列表吗?🤔
  • 我们下次再说 👋