图像识别学习笔记001 通道转换

Posted Xlei314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像识别学习笔记001 通道转换相关的知识,希望对你有一定的参考价值。

图片基本操作函数

首先,我们要处理的图片为猫咪如下图所示:

cat.jpg

读取图片

import cv2
img = cv2.imread(“cat.jpg”)
print(img)

其输出为

[[[136 186 228]
  [136 186 228]
  [136 186 228]
  ...
  [122 158 188]
  [122 158 188]
  [122 158 188]]

 [[136 186 228]
  [136 186 228]
  [136 186 228]
  ...
  [122 158 188]
  [122 158 188]
  [122 158 188]]

 [[136 186 228]
  [136 186 228]
  [136 186 228]
  ...
  [121 157 187]
  [121 157 187]
  [121 157 187]]

 ...

 [[ 91 132 205]
  [ 91 132 205]
  [ 91 132 205]
  ...
  [ 90 123 196]
  [ 89 122 195]
  [ 88 121 194]]

 [[ 91 132 205]
  [ 91 132 205]
  [ 91 132 205]
  ...
  [ 90 123 196]
  [ 89 122 195]
  [ 88 121 194]]

 [[ 91 132 205]
  [ 91 132 205]
  [ 91 132 205]
  ...
  [ 90 123 196]
  [ 89 122 195]
  [ 88 121 194]]]

imread函数

imread( )功能就是载入一张图片.
imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种:

  • cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1.
  • cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0.
  • cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1.

该函数经常配合imshow( )函数一起使用,imshow()函数功能就是把你刚才载入的图片显示出来.

imread在不加第二个参数的情况下默认将图片转换成了一个三维数组,最里面的一维代表的是一个像素的三个通道的灰度值,第二个维度代表的是第一行所有像素的灰度值,第三个维度,也就是最外面的一个维度代表的是这一张图片.

img = cv2.imread("../cat.jpg")
cv2.imshow("cat", img)

cv2.imread()的系数是按照BGR顺序排列的
其中的变量R表示的是仅有原图像红通道的cat.jpg

import cv2
img = cv2.imread("cat.jpg")
red = img[:,:,2].copy()

imwrite函数

还有一个常用的函数为imwrite().
使用函数cv2.imwrite(file,img,num)保存一个图像.
第一个参数是要保存的文件名,第二个参数是要保存的图像.
可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别.默认为3.

cv2.imwrite("out.jpg", img)

通道转换(BGR转RGB)代码:

import cv2

# function: BGR -> RGB

def BGR2RGB(img):
    b = img[:, :, 0].copy()
    g = img[:, :, 1].copy()
    r = img[:, :, 2].copy()

    # RGB > BGR
    img[:, :, 0] = r
    img[:, :, 1] = g
    img[:, :, 2] = b

    return img

# Read image
img = cv2.imread("../cat.jpg")

# BGR -> RGB
img = BGR2RGB(img)

# Save result
cv2.imwrite("out.jpg", img)
cv2.imshow("result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

处理结果

进行处理之后的图片如下图所示:

out.jpg

学习过程中遇到的问题

1.图像处理中三维数组代表什么?

答:我们在做图像处理的时候会遇到三维数组,也可以称为三维张量(tensor)。我们可以将三维数组想象成为一个立方体,第一维度理解为立方体的长,第二维度理解为宽,彩色图片是3通道的,所以第三维“图片通道”想象成深度。用立方体中直观展示:

2.通道

答:通道 : 把数字图像按照颜色成分划分 其中

单通道图像 :每个像素点只用一个数值来表示,只可以表示灰度,0表示黑

三通道 : RGB模式,用红绿蓝来表示图像,可以表示彩色,全0表示黑色

四通道 在RGB的基础上加入了,alpha(透明度),alpha=0,表示全透明

3.深度

深度(位数)即比特数

位深 :每个像素点所占的总位数

位深 = 像素的通道数*像素的位数

问题参考文章:
numpy和cv2.imread( )中三维数组位置详解
图像处理中的 通道, 深度

以上是关于图像识别学习笔记001 通道转换的主要内容,如果未能解决你的问题,请参考以下文章

初学opencv c++学习笔记图像的相关操作及属性

CS231n 学习笔记 Image CLassification

opencv学习笔记第六篇:分离颜色通道多通道图像混合和图像对比度亮度值的调整

java:BufferedImage判断图像通道顺序并转RGB/BGR

PCA人脸识别学习笔记---代码篇

MMAction2-视频理解行为识别(学习笔记-附代码实操)