写点什么

Opencv 图像处理:图像通道、直方图与色彩空间

作者:timerring
  • 2022-10-25
    山东
  • 本文字数:2777 字

    阅读完需:约 9 分钟

本文已收录于 Opencv 系列专栏: 深入浅出OpenCV ,专栏旨在详解 Python 版本的 Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。

1.图像通道

通道分离

目的


将彩色图像,分成 b 、g 、r 3 个单通道图像。方便我们对 BGR 三个通道分别进行操作。


函数:


cv2.split(img)
复制代码


参数说明


参数 1 :待分离通道的图像


例程


#加载opencvimport cv2src=cv2.imread('split.jpg')cv2.imshow('before',src)#调用通道分离b,g,r=cv2.split(src)#三通道分别显示cv2.imshow('blue',b)cv2.imshow('green',g)cv2.imshow('red',r)cv2.waitKey(0)cv2.destroyAllWindows()
复制代码


分离后的每个通道实际上还是一个灰度图,输出之后每个通道仍是灰色的。如果想要查看每个颜色的图,应该进行合并。这时需要生成一个规模相同的零矩阵。


np.zeros(image.shape[:2],dtype="uint8")# 无符号的8位,即0-255
复制代码


其中 print(image.shape[:2])取出的就是该照片的长宽(459, 571)。


#导入opencv模块import numpy as npimport cv2             image=cv2.imread("split.jpg")#读取要处理的图片cv2.imshow("src",image)cv2.waitKey(0)B,G,R = cv2.split(image)#分离出图片的B,R,G颜色通道
zeros = np.zeros(image.shape[:2],dtype="uint8")#创建与image相同大小的零矩阵cv2.imshow("BLUE",cv2.merge([B,zeros,zeros]))#显示 (B,0,0)图像cv2.imshow("GREEN",cv2.merge([zeros,G,zeros]))#显示(0,G,0)图像cv2.imshow("RED",cv2.merge([zeros,zeros,R]))#显示(0,0,R)图像cv2.waitKey(0)cv2.destroyAllWindows()
复制代码

通道合并

目的


通道分离为 B,G,R 后,对单独通道进行修改,最后将修改后的三通道合并为彩色图像。


函数:


cv2.merge(List)
复制代码


参数说明


参数 1 :待合并的通道数,以 list 的形式输入


例程


#加载opencvimport cv2src=cv2.imread('split.jpg')cv2.imshow('before',src)#调用通道分离b,g,r=cv2.split(src)#将Blue通道数值修改为0g[:] = 0#合并修改后的通道img_merge=cv2.merge([b,g,r])cv2.imshow('merge',img_merge)cv2.waitKey(0)cv2.destroyAllWindows()
复制代码

2.图像直方图

图像直方图:


图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。


图像直方图的意义:


  • 直方图是图像中像素强度分布的图形表达方式

  • 它统计了每一个强度值所具有的像素个数

  • CV 领域常借助图像直方图来实现图像的二值化



直方图绘制

目的


直方图是对图像像素的统计分布,它统计了每个像素(0 到 255 )的数量。


函数:


cv2.calcHist(images, channels, mask, histSize, ranges)
复制代码


参数说明


参数 1:待统计图像,需用中括号括起来


参数 2:待计算的通道


参数 3:Mask,这里没有使用,所以用 None。


参数 4:histSize ,表示直方图分成多少份


参数 5:是表示直方图中各个像素的值 ,[0.0, 256.0]表示直方图能表示像素值从 0.0 到 256 的像素。直方图是对图像像素的统计分布,它统计了每个像素( 0 到 255)的数量。

方法一:cv 库
from matplotlib import pyplot as pltimport cv2import numpy as npimg = cv2.imread('girl.jpg')img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.imshow(img_gray, cmap=plt.cm.gray)hist = cv2.calcHist([img], [0], None, [256], [0, 256])

plt.figure()plt.title("Grayscale Histogram")plt.xlabel("Bins")plt.ylabel("# of Pixels")plt.plot(hist)plt.xlim([0, 256])plt.show()
复制代码


方法二:plt 库
#加载第三方库from matplotlib import pyplot as pltimport cv2
girl = cv2.imread("girl.jpg")cv2.imshow("girl", girl)# girl.ravel()函数是将图像的三位数组降到一维上去,#256为bins的数目,[0, 256]为范围plt.hist(girl.ravel(), 256, [0, 256])plt.show()cv2.waitKey(0)cv2.destroyAllWindows()
复制代码


三通道直方图绘制

from matplotlib import pyplot as pltimport cv2girl = cv2.imread("girl.jpg")cv2.imshow("girl", girl)color = ("b", "g", "r")#使用for循环遍历color列表,enumerate枚举返回索引和值for i, color in enumerate(color):    hist = cv2.calcHist([girl], [i], None, [256], [0, 256])    plt.title("girl")    plt.xlabel("Bins")    plt.ylabel("num of perlex")    plt.plot(hist, color = color)    plt.xlim([0, 260])plt.show()cv2.waitKey(0)cv2.destroyAllWindows()
复制代码


3.图像色彩空间

概念:


颜色空间也称彩色模型(又称彩色空间或彩色系统)它的用途是在某些标准下用通常可接受的方式对彩色加以说明。


常见的颜色空间:


RGB 、 HSV 、 HSI 、 CMYK

RGB 颜色空间

主要用于计算机图形学中,依据人眼识别的颜色创建,图像中每一个像素都具有 R,G,B 三个颜色分量组成,这三个分量大小均为 [ 0,255]。通常表示某个颜色的时候,写成一个 3 维向量的形式( 110,150,130 )。


颜色模型:


  • 原点对应的颜色为黑色,它的三个分量值都为 0

  • 距离原点最远的顶点对应的颜色为白色,三个分量值都为 1

  • 从黑色到白色的灰度值分布在这两个点的连线上,该虚线称为灰度线;

  • 立方体的其余各点对应不同的颜色,即三原色红、绿、蓝及其混合色黄、品红、 青色;



对角线上的值都是一样的,我们称它为灰度线。

HSV 颜色空间

HSV(Hue, Saturation, Value) 是根据颜色的直观特性由 A. R. Smith 在 1978 年创建的一种颜色空间,这个模型中颜色的参数分别是:色调( H ),饱和度 (S),明度(V)。


颜色模型:


  • H 通道 Hue ,色调色彩,这个通道代表颜色。

  • S 通道 Saturation ,饱和度,取值范围 0%~100%,值越大,颜色越饱和。

  • V 通道 Value ,明暗,数值越高,越明亮, 0%(黑)到 100%(白)。


RGB 空间与 HSV 转化
import cv2#色彩空间转换函数def color_space_demo(image):    gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)    cv2.imshow('gray',gray)    hsv=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)    #print(hsv)    cv2.imshow('hsv',hsv)#读入一张彩色图src=cv2.imread('girl.jpg')cv2.imshow('before',src)#调用color_space_demo函数进行色彩空间转化color_space_demo(src)cv2.waitKey(0)cv2.destroyAllWindows()
复制代码

HSI 颜色空间概念

HSI 模型是美国色彩学家孟塞尔 (H.A.Munseu)于 1915 年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。


模型优点


  • 在处理彩色图像时,可仅对 I 分量进行处理,结果不改变原图像中的彩色种类;

  • HSI 模型完全反映了人感知颜色的基本属性,与人感知颜色的结果一一对应。


CMYK 颜色空间

CMYK(Cyan,Magenta,Yellow,blacK)颜色空间应用于印刷工业,印刷业通过青(C)、品(M)、黄(Y)三原色油墨的不同网点面积率的叠印来表现丰富多彩的颜色和阶调,这便是三原色的 CMY 颜色空间。



发布于: 刚刚阅读数: 3
用户头像

timerring

关注

还未添加个人签名 2022-07-14 加入

还未添加个人简介

评论

发布
暂无评论
Opencv 图像处理:图像通道、直方图与色彩空间_OpenCV_timerring_InfoQ写作社区