欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

openCV-色彩通道的分离与合并

程序员文章站 2022-07-07 19:18:57
title: openCV(色彩通道的分离与合并)author: BbiHHtags:Naoqi机器人categories:openCV图片变化date: 2019-08-18 11:36:00(原创)本篇来看一下opencv的两个函数 通道cv2.split 和 通道cv2.merge操作像素直接操作像素来分离通道得到单通道的灰度图首先了解一下python中获取的图片信息 : 一张图片由[h*w]个像素构成,每个像素点有组成其颜色的参数,事实上就是BGR三通道的分量值 。...

title: openCV(色彩通道的分离与合并)
author: BbiHH
tags:

  • Naoqi机器人
    categories:
  • openCV
  • 图片变化
    date: 2019-08-18 11:36:00

(原创)

本篇来看一下opencv的两个函数 通道cv2.split通道cv2.merge

操作像素

直接操作像素来分离通道得到单通道的灰度图

首先了解一下python中获取的图片信息 : 一张图片由[h*w]个像素构成,每个像素点有组成其颜色的参数,事实上就是BGR三通道的分量值 。

#coding=utf-8

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread("D:\图片\Saved Pictures\qianxun.jpg",cv2.IMREAD_COLOR)

#直接获取图片中通道的值
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]

cv2.imshow("blue",b)
cv2.imshow("green",g)
cv2.imshow("red",r)
cv2.waitKey(0)

函数实现

通道拆分 cv2.split

  • cv2.split(image) 将图片拆分成 B G R 三个通道(顺序就是为BGR)
    返回一个单通道的数组 (色彩图片是由三个数组构成,就是BGR三个通道的数组)
#coding=utf-8

# 导入库
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread("D:\图片\Saved Pictures\qianxun.jpg",cv2.IMREAD_COLOR)

#通道分离
b,g,r = cv2.split(img)

cv2.imshow("Original",img)
cv2.imshow("Red", r)
cv2.imshow("Green", g)
cv2.imshow("Blue", b)
cv2.waitKey(0)

输出效果 为黑白灰度的单通道图片

cv2.split 函数分离得到各个通道的灰度值(单通道图像)
openCV-色彩通道的分离与合并

通道合并cv2.merge

  • cv2.merge 将表颜色的数组合成构成图片, 参数为 [B,G,R]

若想得到色彩分离的图片(例如:红通道就变成只有红色合成的图片) ,实际上是在多通道下其他通道的分量值变为0。可以通过通道合并再将通道分量值取0。

#coding=utf-8

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread("D:\图片\Saved Pictures\qianxun.jpg",cv2.IMREAD_COLOR)

#通道分离
b,g,r = cv2.split(img)

cv2.imshow("Original",img)
cv2.imshow("Red", r)
cv2.imshow("Green", g)
cv2.imshow("Blue", b)
cv2.waitKey(0)

# 生成一个值为0的单通道数组
zeros = np.zeros(img.shape[:2], dtype = "uint8")
# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0的数组填充
cv2.imshow("blue", cv2.merge([b, zeros, zeros]))
cv2.imshow("green", cv2.merge([zeros, g, zeros]))
cv2.imshow("red", cv2.merge([zeros, zeros, r]))
cv2.waitKey(0)

cv2 中不支持直接创建图片, 要依靠 np里面的初始化函数来生成一个图片数据组 , 其初始化的数值为 0 。

效果如下
openCV-色彩通道的分离与合并

不同灰度图下的图片
openCV-色彩通道的分离与合并

本文地址:https://blog.csdn.net/qq_43332980/article/details/107155905