OpenCV+Python 彩色图片的 BGR、灰度图、HSV分量图显示的程序

介绍

OpenCV+Python

使用openCV中的split()函数和 cvtColor()函数提取一张彩色图片的BGR分量图、灰度图、HSV分量图

软件架构

模块:OpenCV 4.0.0.21

编程语言:Python 3.7.2

编译器:PyCharm 2018

先上一张效果图

第一行 第1张图是原始图片,第2张是Hue色度分量图,第3张图是Saturation饱和度分量图,第4张图是Value亮度分量

第二行 第1张图是图片是灰度图,第2张图是绿色分量图,第3张图是红色分量图,第4张图是蓝色分量图。

所有程序代码

# -*- coding:utf-8 -*-
#本程序用于将一张彩色图片分解成BGR的分量显示,灰度图显示,HSV分量显示
import cv2  #导入opencv模块
import numpy as npprint("Hellow word!")     #打印“Hello word!”,验证模块导入成功img = cv2.imread("imag2.jpg")  #导入图片,图片放在程序所在目录
cv2.namedWindow("imagshow", 2)   #创建一个窗口
cv2.imshow('imagshow', img)    #显示原始图片"""
#使用直接访问的方法
B = img[:, :, 0]
G = img[:, :, 1]
R = img[:, :, 2]
"""
#使用split函数分解BGR
(B, G, R) = cv2.split(img) #分离图像的RBG分量#以灰度图的形式显示每个颜色的分量
"""
cv2.namedWindow("B",2)   #创建一个窗口
cv2.imshow('B', B)       #显示B分量
cv2.namedWindow("G",2)   #创建一个窗口
cv2.imshow('G', G)       #显示G分量
cv2.namedWindow("R",2)   #创建一个窗口
cv2.imshow('R', R)       #显示R分量
"""# 生成一个值为0的单通道数组
zeros = np.zeros(img.shape[:2], dtype = "uint8")
# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0的数组填充
cv2.namedWindow("Blue",2)   #创建一个窗口
cv2.imshow("Blue", cv2.merge([B, zeros, zeros]))
cv2.namedWindow("Green",2)   #创建一个窗口
cv2.imshow("Green", cv2.merge([zeros, G, zeros]))
cv2.namedWindow("Red",2)   #创建一个窗口
cv2.imshow("Red", cv2.merge([zeros, zeros, R]))#使用cvtColor转换为灰度图
out_img_GRAY=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将图片转换为灰度图
cv2.namedWindow("GRAY_imag",2)   #创建一个窗口
cv2.imshow('GRAY_imag', out_img_GRAY) #显示灰度图#使用cvtColor转换为HSV图
out_img_HSV=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#将图片转换为灰度图
hsvChannels=cv2.split(out_img_HSV)  #将HSV格式的图片分解为3个通道cv2.namedWindow("Hue",2)   #创建一个窗口
cv2.imshow('Hue',hsvChannels[0]) #显示Hue分量
cv2.namedWindow("Saturation",2)   #创建一个窗口
cv2.imshow('Saturation',hsvChannels[1]) #显示Saturation分量
cv2.namedWindow("Value",2)   #创建一个窗口
cv2.imshow('Value',hsvChannels[2]) #显示Value分量cv2.waitKey(0)  #等待用户操作

下面介绍程序的实现方法

1、导入一张图片并显示

img = cv2.imread("imag2.jpg")  #导入图片,图片放在程序所在目录
cv2.namedWindow("imagshow", 2)   #创建一个窗口
cv2.imshow('imagshow', img)    #显示原始图片

cv2.imread(a,b):读入图片,共两个参数;第一个参数为要读入的图片文件名(包含文件路径);第二个参数为如何读取图片,包括cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:以灰度模式读入图片;cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道。

img为存储图片矩阵的变量

用法:cv2.namedWindow(‘窗口标题’,默认参数)
默认参数:cv2.WINDOW_AUTOSIZE+cv2.WINDOW_KEEPRATIO+cv2.WINDOW_GUI_EXPANDED)

参数:

  • cv2.WINDOW_NORMAL 窗口大小可改变
  • cv2.WINDOW_AUTOSIZE 窗口大小不可改变
  • cv2.WINDOW_FREERATIO 自适应比例
  • cv2.WINDOW_KEEPRATIO 保持比例饿
  • cv2.WINDOW_GUI_NORMAL
  • cv2.WINDOW_GUI_EXPANDED

用法:cv2.imshow(‘窗口标题’, image),如果前面没有cv2.namedWindow,就自动先执行一个cv2.namedWindow。

2、提取BGR分量

"""
#使用直接访问的方法
B = img[:, :, 0]
G = img[:, :, 1]
R = img[:, :, 2]
"""
#使用split函数分解BGR
(B, G, R) = cv2.split(img) #分离图像的RBG分量

提取BGR的分量的方法有两种:

一种是通过直接访问的方法,使用B = img[:, :, 0]

一种是通过cv2.split(img) 函数,

函数原型为:void split(const Mat& src,Mat *mvBegin);

第一个参数为要进行分离的图像矩阵,第二个参数可以是Mat数组的首地址,或者一个vector对象

3、显示图片的BGR分量

#以灰度图的形式显示每个颜色的分量
"""
cv2.namedWindow("B",2)   #创建一个窗口
cv2.imshow('B', B)       #显示B分量
cv2.namedWindow("G",2)   #创建一个窗口
cv2.imshow('G', G)       #显示G分量
cv2.namedWindow("R",2)   #创建一个窗口
cv2.imshow('R', R)       #显示R分量
"""

如图所示,将BGR颜色分量提取后,如果直接显示,显示的结果将会是以该颜色的灰度图,例如绿色分量,原图片越绿,灰度图就越亮。

#以单通道显示BGR分量图片
# 生成一个值为0的单通道数组
zeros = np.zeros(img.shape[:2], dtype = "uint8")
# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0的数组填充
cv2.namedWindow("Blue",2)   #创建一个窗口
cv2.imshow("Blue", cv2.merge([B, zeros, zeros]))
cv2.namedWindow("Green",2)   #创建一个窗口
cv2.imshow("Green", cv2.merge([zeros, G, zeros]))
cv2.namedWindow("Red",2)   #创建一个窗口
cv2.imshow("Red", cv2.merge([zeros, zeros, R]))

如图所示,将各颜色分量进行显示,下面的图像是三通道图像,只是在cv2.split分离出的图像基础上,扩展另外两个通道,但另外两个通道值为0,而得到下面的这样的图像。

4、灰度图显示

#使用cvtColor转换为灰度图
out_img_GRAY=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将图片转换为灰度图
cv2.namedWindow("GRAY_imag",2)   #创建一个窗口
cv2.imshow('GRAY_imag', out_img_GRAY) #显示灰度图

5、提取HSV分量并显示每个分量

#使用cvtColor转换为HSV图
out_img_HSV=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#将图片转换为灰度图
hsvChannels=cv2.split(out_img_HSV)  #将HSV格式的图片分解为3个通道cv2.namedWindow("Hue",2)   #创建一个窗口
cv2.imshow('Hue',hsvChannels[0]) #显示Hue分量
cv2.namedWindow("Saturation",2)   #创建一个窗口
cv2.imshow('Saturation',hsvChannels[1]) #显示Saturation分量
cv2.namedWindow("Value",2)   #创建一个窗口
cv2.imshow('Value',hsvChannels[2]) #显示Value分量

最主要的函数
cv2.cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );

参数解释:
. InputArray src: 输入图像即要进行颜色空间变换的原图像,可以是Mat类
. OutputArray dst: 输出图像即进行颜色空间变换后存储图像,也可以Mat类
. int code: 转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片,如下图
. int dstCn = 0: 目标图像通道数,如果取值为0,则由src和code决定

码云下载完整代码:项目完整代码点这里哦!

OpenCV+Python 彩色图片的 BGR、灰度图、HSV分量图显示的程序相关推荐

  1. OpenCV python 彩色图片的三通道

    OpenCV python 彩色图片的三通道 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 目的:理解彩色图片的三 ...

  2. OprenCV学习之路一:将彩色图片转换成灰度图

    //将一张彩色图片转成灰度图:#include<cv.h> #include<cvaux.h> #include<highgui.h> #include<ml ...

  3. Python彩色图片转手绘风格

    Python彩色图片转手绘风格 from PIL import Image # 图像的手绘 """黑白风格边界的位置比较重相同或相近色彩趋近于白色咯有光源效果 " ...

  4. MATLAB应用实战系列(七十一)-MATLAB实战应用案例:图像处理将灰度图片变成负片彩色图片转换成灰度图片

    前言 本文目录 获取图片的信息 将灰度图片变成负片 彩色图片转换成灰度图片 图像噪声的添加 加10次噪声 colorbar的使用 将数据转换为图片 clc clearA是结构体名,用来存储读入的图像数 ...

  5. (OpenCV+Python)--图片局部区域像素值处理(改进版)

    上一个版本看这里:<Python+OpenCV实现[图片]局部区域像素值处理> 上个版本的代码虽然实现了我需要的功能,但还是走了很多弯路,我意识到图片本就是数组形式,对于8位灰度图,通道数 ...

  6. pythpn实现bgr颜色通道分离,并分别显示一副彩色图片的BGR通道图片

    分别显示一副彩色图片的B,G,R通道图片 要实现这个功能,原理很简单. 一张彩图有三个颜色通道,显示哪个就将另外两个通道置0 代码 import cv2 as cv img = cv.imread(' ...

  7. OpenCV python去除图片水印

    在浏览阿里巴巴网站的时候发现有些图片有水印,想着怎么能把它们去除.以下的去除只适合单个图片去除,对于大量图片去除水印的功能需要大伙一起研究 HSV范围 (图1) (图2) # -*- coding: ...

  8. python将图片转成灰度图

    运行代码工具:jupyter notebook 图片保存在运行目录下 from PIL import Image I = Image.open('C:/Users/LitmoonHoney/Deskt ...

  9. Python彩色图片转成黑白图片

    以下程序运行会将当前目录下的所有.jpg与.png文件进行转换 # 图片二值化 from PIL import Image import osdef convertToGrayImg(imagePat ...

最新文章

  1. 剑指offer_第10题_矩形覆盖
  2. python 类的绑定方法和非绑定方法
  3. rice university phd application result
  4. Mysql迁移到Oracle方法
  5. HDU 4777 Rabbit Kingdom 树状数组
  6. 谈谈感想,8元体会易生信培训
  7. androidq获取文件正式路径_android Q 新特性
  8. Windwos配置Maven环境变量
  9. 30个经典机器学习项目,GitHub星星加起来超过16万丨资源
  10. Turbo | 简介与安装
  11. 【Java 8 新特性】使用Collectors.toList()方法将Map转化成List的示例
  12. SAP的系统审计以及SM19的使用 1
  13. 淘宝全自动下单——解放双手
  14. 如何仿照OSINT模式进行机密信息的收集与发掘
  15. 对IPv6的理解以及其与IPv4的区别
  16. Android 2.3的StrictMode使用
  17. 线性代数-向量,矩阵,线性变换
  18. 计算机应用基础0039答案,计算机应用基础-0039(贵州电大-课程号:5205004)参考资料.docx...
  19. 宝塔Linux面板的搭建
  20. 微信小程序使用日历插件

热门文章

  1. 让你的 Mac 用上最美的屏保,Aerial 使用教程
  2. 阿里云ACP认证之云安全知识整理(考题占比 10%)
  3. podman 开机自启
  4. JS和CSS压缩部署,提高访问效率
  5. Neo4j:足球转移图表
  6. rp导入图片大小_Axure制作图像的放大与缩小效果的四种方式
  7. imx7d 通过imx7d-sdb.dts 添加 spi设备
  8. 快速学习Groovy
  9. 一种获得深度睡眠的方法
  10. HTML与CSS3的知识整理