通道分离

分离方法有两个:opencv自带的分离方法split() ; 自己定义函数获取子矩阵

1.opencv自带分离三通道的函数split(),返回值是对应通道的灰度图

import cv2

img = cv2.imread(r'C:\Users\thorne\PycharmProjects\biyesheji\image\19.jpeg')
b, g, r = cv2.split(img)
#蓝色
cv2.imshow("Blue 1", b)
cv2.waitKey(0)
#绿色
cv2.imshow("Green 1", g)
cv2.waitKey(0)
#红色
cv2.imshow("Red 1", r)
cv2.waitKey(0)

2.定义函数来获取三个通道的子矩阵

# !/usr/bin/env python
# coding=utf-8
import cv2
#返回红色通道灰度图
def get_red(img):
    redImg = img[:,:,2]
    return redImg
#返回绿色通道灰度图
def get_green(img):
    greenImg = img[:,:,1]
    return greenImg
#返回蓝色通道灰度图
def get_blue(img):
    blueImg = img[:,:,0]
    return blueImg

img = cv2.imread(r'C:\Users\thorne\PycharmProjects\biyesheji\image\19.jpeg')
#蓝
b=get_blue(img)
cv2.imshow("Blue", b)
cv2.waitKey(0)
#绿
g=get_green(img)
cv2.imshow("Green", g)
cv2.waitKey(0)
#红
r=get_red(img)
cv2.imshow("Rad", r)
cv2.waitKey(0)

合并通道

import cv2
import numpy as np
img = cv2.imread(r'C:\Users\thorne\PycharmProjects\biyesheji\image\19.jpeg')
b, g, r = cv2.split(img)
#生成一个值为0的单通道数组
zeros = np.zeros(img.shape[:2], dtype = "uint8")  #512x512
binary, full = cv2.threshold(zeros,-1,255,cv2.THRESH_BINARY)
# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0(黑)的数组填充
#蓝
cv2.imshow('blue',cv2.merge([b, zeros, zeros]))
cv2.waitKey(0)
#红
cv2.imshow('red',cv2.merge([zeros, zeros,r]))
cv2.waitKey(0)
#绿
cv2.imshow('green',cv2.merge([zeros, g,zeros]))
cv2.waitKey(0)
# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为255(白)的数组填充
cv2.imshow('blue',cv2.merge([b, full, full]))
cv2.waitKey(0)
cv2.imshow('red',cv2.merge([full, full,r]))
cv2.waitKey(0)
cv2.imshow('green',cv2.merge([full, g,full]))
cv2.waitKey(0)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐