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

文章目录

  • 1.图像通道
    • 通道分离
    • 通道合并
  • 2.图像直方图
    • 直方图绘制
      • 方法一:cv库
      • 方法二:plt库
    • 三通道直方图绘制
  • 3.图像色彩空间
    • RGB 颜色空间
    • HSV 颜色空间
      • RGB空间与HSV 转化
    • HSI 颜色空间概念
    • CMYK 颜色空间

1.图像通道

通道分离

目的

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

函数:

cv2.split(img)

参数说明

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

例程

#加载opencv
import cv2
src=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 np
import 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 的形式输入

例程

#加载opencv
import cv2
src=cv2.imread('split.jpg')
cv2.imshow('before',src)
#调用通道分离
b,g,r=cv2.split(src)
#将Blue通道数值修改为0
g[:] = 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 plt
import cv2
import numpy as np
img = 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 plt
import cv2girl = 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 plt
import cv2
girl = 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)颜色空间应用于印刷工业,印刷业通过青©、品(M)、黄(Y)三原色油墨的不同网点面积率的叠印来表现丰富多彩的颜色和阶调,这便是三原色的CMY颜色空间。

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

  1. python+opencv图像处理之七:直方图均衡化

    python+opencv图像处理之七:直方图均衡化 目录 python+opencv图像处理之七:直方图均衡化 一.直方图均衡化 二.直方图绘制 三.直方图均衡化 四.有限对比适应性直方图均衡化 一 ...

  2. Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的直方图算法增强(C++)

    Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的直方图算法增强(C++) Baumer工业相机 Baumer工业相机使用图像算法增加图像的技术背景 Baumer工业相机 ...

  3. OpenCV分离图像通道

    opencv的imread函数读取的灰度图是单通道的. opencv分离图像通道: 源码: Mat img = imread("D:/1.jpg",1);Mat imgR,imgG ...

  4. 使用Opencv分离图像通道/合并图像通道

    一. 使用cvSplit将图像的中的通道拆分到单个图像中 1.所需函数:cvSplit 函数功能:将图像的中的通道拆分到单个图像中 函数原型: void cvSplit( const CvArr* s ...

  5. opencv图像处理总结

    opencv图像处理基本操作 1. 矩阵数据类型 通用矩阵数据类型: CV_<bit_depth>(S|U|F)C<number_of_channels> 其中,S表示带符号整 ...

  6. OpenCV与图像处理学习二——图像直方图与色彩空间

    OpenCV与图像处理学习二--图像直方图与色彩空间 2.4 图像直方图(Image Histogram) 2.4.1 直方图的绘制 2.4.2 三通道直方图绘制 2.5 颜色空间 2.5.1 RGB ...

  7. OpenCV图像处理学习二十,图像直方图均衡化原理与实现

    一.图像直方图的概念 图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图.直方图反映了图像灰度的分布情况,是图像的统计学特征.图像的灰度直方 ...

  8. Python+OpenCV 图像处理系列(5)—— 图像 ROI 操作及通道的拆分合并

    1. 图像 ROI 有时你需要对一幅图像的特定区域进行操作.例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜索.这样会提高程序的准确性和性 ...

  9. Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图

    一步一步来吧 上一节:Python+Opencv图像处理新手入门教程(一):介绍,安装与起步 1.什么是图像 对于计算机而言,图像的本质是一个由像素点构成的矩阵. 例如我们用肉眼很容易分辨一辆汽车的后 ...

最新文章

  1. python单词意思-Python
  2. 原码、反码、补码的产生、应用以及优缺点有哪些?
  3. Python中函数的介绍以及用法
  4. 网络基础知识及计算机基础,OSI7层
  5. 以LeNet-5为例理解CNN
  6. MySQL表连接(join)
  7. 大数据技术的特点有哪些
  8. 新手机出现陌生女人照片,客服:大数据时代可能性有很多
  9. maven如何添加404页面
  10. Android篮球计分器论文,基于单片机的篮球计时计分器设计_毕业设计论文
  11. 最全面的Android混淆
  12. Windows 下安装 TensorFlow 2.2 GPU 版 教程:坑多,整理出来方便大家
  13. java web服务_如何用Java实现Web服务器
  14. 函数默认参数的TDZ
  15. 解决word里没有Endnote加载项
  16. 数据库集群技术(转载)
  17. linux学习笔记 linux内核6.0.2目录结构
  18. Python-100-Days学习笔记day09
  19. 机器学习笔记—13(李宏毅版)神经网络压缩与元学习
  20. 研发效能怎么分析?方法论、模型、误区都在这里了

热门文章

  1. mysql重设密码_MySQL之重设密码(忘记密码)讲解
  2. Android带有边框的裁剪算法,如何在Android中创建带有边框的表格?
  3. golang:实现类似tailf命令的功能
  4. proteus画完图怎么保存_proteus怎么把电路图完整的导出来,导到WORD中。
  5. 计算机软件工程 高级职称鉴定
  6. python青少年编程题目二级_青少年编程能力等级测评试卷及答案 Python编程(二级)...
  7. ios13管理信任设备_如何取消对我已信任iOS 7设备的计算机的信任?
  8. 没有制造基因的企业,如何跑步入场“工业互联网”?
  9. 清除三星SCX4200硒鼓上的计数器
  10. 用python画桃花_武大樱花又盛开,用Python画一棵樱花树