Skip to content

Latest commit

 

History

History
184 lines (138 loc) · 4.3 KB

611-1852935-BGR图像中通道的分离与融合.sy.md

File metadata and controls

184 lines (138 loc) · 4.3 KB
show version enable_checker
step
1.0
true

opencv

回忆

  • 上次我们研究了彩色图片的数据结构
    • 三维矩阵
      • 高度
      • 宽度
      • BGR三色元组
  • 可以自己定制某种特殊的图像
  • 也可以复制现有图像的某个矩阵范围
  • 像素可以进行分割和融合吗?

分离出通道

# -*- coding:utf-8 -*-
import cv2
import numpy as np

#读取图片
img = cv2.imread("monkey.png")
rows, cols, chn = img.shape

#拆分通道
b = cv2.split(img)[0]

#设置g、r通道为0
g = np.zeros((rows,cols), dtype=img.dtype)
r = np.zeros((rows,cols), dtype=img.dtype)

#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
           
#等待显示
cv2.waitKey(0)
  • RG通道为纯黑
  • B通道来自于原始图像

图片描述

观察素材

  • 刷新蓝桥环境

图片描述

  • 得到下图

图片描述

  • 可以把下图中BGR三通道分离吗?

分离通道

import cv2                               
image = cv2.imread("/home/shiyanlou/rgb.jpg")                      
cv2.imshow("image",image)                
b,g,r = cv2.split(image)                 
cv2.imshow("red",r)                      
cv2.imshow("green",g)                    
cv2.imshow("blue",b)                     
cv2.waitKey()                            
cv2.destroyAllWindows()
  • 分离通道效果

图片描述

  • 可以把分离的通道再合成吗?

合并通道

import cv2     
image = cv2.imread("/home/shiyanlou/rgb.jpg")
cv2.imshow("image",image)
b,g,r = cv2.split(image)
bgr = cv2.merge([b,g,r])
cv2.imshow("bgr",bgr)
rgb = cv2.merge([r,g,b])
cv2.imshow("rgb",rgb)                                              
cv2.waitKey()  
cv2.destroyAllWindows()
  • 可以合成通道

图片描述

  • 次序不同会有不同效果
  • 可以把这张彩色照片反相吗?

反相

import cv2
image = cv2.imread("/home/shiyanlou/rgb.jpg")
cv2.imshow("image",image)
h,w,c = image.shape
for row in range(h):
    for col in range(w):
        b, g, r = image[row, col]    #直接读取到三个通道的值
        b = 255 - b    #实现图像色彩取反。像素值范围为[0,255]
        g = 255 - g    #实现图像色彩取反。像素值范围为[0,255]
        r = 255 - r    #实现图像色彩取反。像素值范围为[0,255]
        image[row, col] = [b, g, r]    #将原图像上的对应像素取反
cv2.imshow("nega",image)
cv2.waitKey()
cv2.destroyAllWindows()
  • 效果
    • 从 光成像 的 RGB三原色
    • 变成了 印刷成像 的 CMYK青品黄黑

图片描述

  • 可以有不透明度alpha通道吗?

RGBA

import cv2   
image = cv2.imread("/home/shiyanlou/rgb.jpg")
bgra_image= cv2.cvtColor(image,cv2.COLOR_BGR2BGRA)
b,g,r,a = cv2.split(bgra_image)
a[:,:] = 50  
bgra_50 = cv2.merge([b,g,r,a])
print(bgra_50)
cv2.imwrite("rgb50.png",bgra_50)
cv2.imshow("bgra_50",bgra_50)
cv2.waitKey()
cv2.destroyAllWindows()
  • 用火狐打开文件

图片描述

抖音效果RGB分离

图片描述

  • 代码
import cv2                                                         
import numpy as np
before = cv2.imread("/home/shiyanlou/tiktok.jpg")
cv2.imshow("before",before)
after = np.zeros((300,300,3),np.uint8)
after[30:300,30:300,0] = before[0:270,0:270,0]
after[30:300,30:300,1] = before[0:270,0:270,1]
after[0:270,0:270,2] = before[30:300,30:300,2]
cv2.imshow("after",after)
cv2.waitKey()
cv2.destroyAllWindows()
  • 结果

图片描述

总结

  • 图像不但可以从像素矩阵的方式进行裁切与合并
  • 还可以从通道的角度分离与合并
  • 默认的状态就是BGR三色通道融合
  • 可以将其他通道的信息独立筛选出来
  • 可以在图像文件上写字吗?🤔
  • 我们下次再说 👋