OpenCV入门 图像通道的分离与合并 python实现

总结:

 

通道分离

    #分离

    b,g,r=cv2.split(img)

    #保存

    cv2.imwrite(filepath+'out/r.png',r)

    cv2.imwrite(filepath+'out/g.png',g)

    cv2.imwrite(filepath+'out/b.png',b)

 

获得某个通道的彩色图片

cop_img[:,:,0]=0

cop_img[:,:,1]=0

cv2.imwrite(filepath+'out/color_r.png',cop_img)

第三维度=0——B 

                1——G

                2——R

 

通道合并

img1=cv2.merge((b,g,r))

 

编程实例

编程要求

根据提示,在右侧编辑器补充 Begin-End 代码,实现图像通道分离与合并操作。具体要求如下:

  1. 对于已经读取的图片变量img,分离它的R、G、B三个通道,并将三个通道按提示的指定路径保存成图片;
  2. 合并上一步中分离的三个通道,并按提示的指定路径保存R通道的彩色图像。

 

import cv2


# 实现图像颜色通道分离和保存

def task2():

    filepath = "/data/workspace/myshixun/task2/"

    img = cv2.imread( filepath + 'pic.jpg')

    

    # 请分离图像的B,G,R通道,并保存到给定filepath下的out文件夹,

    # 三个通道分别保存为r.png、g.png、b.png


    #分离

    b,g,r=cv2.split(img)

    #保存

    cv2.imwrite(filepath+'out/r.png',r)

    cv2.imwrite(filepath+'out/g.png',g)

    cv2.imwrite(filepath+'out/b.png',b)


    # 请合并分离的通道,并在out文件夹下保存红色通道的彩色图像color_r.png

    #合并

    img1=cv2.merge((b,g,r))

    cop_img=img1.copy()

    #分离出红色通道的彩色图像

    cop_img[:,:,0]=0

    cop_img[:,:,1]=0

    cv2.imwrite(filepath+'out/color_r.png',cop_img)

 

——————————————————————————————————————————————————————

相关知识

通道是图像处理的基本概念,它决定图像如何存储与显示。 RGB 颜色模式下图像具有 R, G, B 三个颜色通道。

对于一幅的数字图像,我们看到的是一幅真正的图片,但是对于计算机,这副图像只是一个数字矩阵。

计算机存储的数字图像的本质是一个多维矩阵。一副尺寸为M × N的图像可以用一个 M × N × c的矩阵来表示,矩阵元素(M, N)的值表示这个位置上的像素的亮度,c表示的就是通道数

描述一个像素点,如果用灰度描述它,就是单通道,即c=1。光学三原色(红、绿、蓝, RGB )能够组成任何的颜色,如果c=3,说明图片在RGB颜色模式,每一个三原色都是一个通道。

注意:

 图像通道仅仅在显示的时候才有意义,即cv2.imshow()

一幅完整的图像,红色绿色蓝色三个通道缺一不可。即使图像中看起来没有蓝色,只能说蓝色光的亮度均为0,但不能说没有蓝色通道存在。因此,“存在、亮度为零”和“不存在”是两个不同的概念

 

图片的通道分离与合并

在 OpenCV 中,可以通过以下的方式将三原色的三个通道分开:

B,G,R = cv2.split(img)

 

#加载opencv

import cv2

src=cv2.imread('split.jpg')

cv2.imshow('before',src)

#调用通道分离

b,g,r=cv2.split(src)——得到b   g  r 三个图像

#三通道分别显示

cv2.imshow('blue',b)

cv2.imshow('green',g)

cv2.imshow('red',r)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

如果使用B,G,R = cv2.split(img),那么得到的是 B,G,R 单独通道的灰度图。因此,只有同时使其它两个通道的“亮度”为 0 ,才会单独显示得到的 BGR 图像。

 

我们以歼20飞机图片为例,分离显示G(绿)通道图片。读入图片矩阵img的第三个维度有0, 1, 2三个值,分别对应B, G, R三个通道。把B、R两个通道置0则可以分离显示出G通道的彩色图像:

img[:, :, 0] = 0  #第三维度=0——B

img[:, :, 2] = 0  #第三维度=2——R

cv2.imshow('J20_only_b', img)

这样,我们就可以得到如图 1 所示的绿色通道图像的彩色图像。

 

图1 歼20 原始图像(左)和 绿色通道彩色图像

 

 

合并通道可以通过下面代码来实现:

img1 = cv2.merge((B,G,R))

 

你可能感兴趣的:(计算机视觉,opencv,计算机视觉,python,cv,webgl)