• Python-OpenCV学习(三):图像的表示


    转载请注明出处:danscarlett的博客园

      
    在Python-OpenCV中,因为有numpy这种强大的基础工具,单通道的灰度图像(一个8位无符号整型的矩阵)就用numpy的array表示。
     
    如果是多通道情况,最常见的就是红绿蓝(RGB)三通道,则第一个维度是高度,第二个维度是高度,第三个维度是通道。
     
    下图是一幅3×3图像在计算机中表示的例子:
    右上角的矩阵里,每个元素都是一个3维数组,分别代表这个像素上的三个通道的值。
    最常见的RGB通道中,第一个元素就是红色(Red)的值,第二个元素是绿色(Green)的值,第三个元素是蓝色(Blue),最终得到的图像如下面的(a)所示。
    RGB是最常见的情况,然而在OpenCV中,默认的图像的表示确实反过来的,也就是BGR,得到的图像是6-1(b)。可以看到,前两行的颜色顺序都交换了,最后一行是三个通道等值的灰度图,所以没有影响。
    OpenCV的这个特殊之处还是需要注意的,比如在Python中,图像都是用numpy的array表示,但是同样的array在OpenCV中的显示效果和matplotlib中的显示效果就会不一样。
     
      下面的简单代码就可以生成两种表示方式下,图6-1中矩阵的对应的图像,生成图像后,放大看就能体会到区别:
     1 import numpy as np
     2 import cv2
     3 import matplotlib.pyplot as plt
     4 
     5 # 图6-1中的矩阵
     6 img = np.array([
     7     [[255, 0, 0], [0, 255, 0], [0, 0, 255]],
     8     [[255, 255, 0], [255, 0, 255], [0, 255, 255]],
     9     [[255, 255, 255], [128, 128, 128], [0, 0, 0]],
    10 ], dtype=np.uint8)
    11 
    12 # 用matplotlib存储
    13 plt.imsave('img_pyplot.jpg', img)
    14 
    15 # 用OpenCV存储
    16 cv2.imwrite('img_cv2.jpg', img)
    img_cv2
     
    img_pyplot
     
    不管是RGB还是BGR,都是高度×宽度×通道数,H×W×C的表达方式,而在深度学习中,因为要对不同通道应用卷积,所以用的是另一种方式:C×H×W,就是把每个通道都单独表达成一个二维矩阵,如图6-1c所示。
     
    备注:matplptlib的安装
    在CMD中运行
    python -m pip install matplotlib
    就可以顺利安装。
     
     
  • 相关阅读:
    JavaScript中split() 使用方法
    解决elementui中table表格rowstyle改变当前行样式
    vue项目中使用$.once(‘hook:beforeDestory‘,() => {})清理定时器问题
    js中split()方法和join()方法
    前端报各种提示错误400 等
    Linux 网络编程Socket
    C 语言数组名
    Checksum
    Gcc 编译过程
    Nodejs爬取壁纸接口数据
  • 原文地址:https://www.cnblogs.com/danscarlett/p/7155886.html
Copyright © 2020-2023  润新知