openCV专栏(二):基础计算实战+色彩空间转换
OPENCV基础操作
提示:本专栏所用版本仅供参考,其他版本也可
库 | 版本 |
---|---|
python | Python 3.9.3 |
opencv | 4.5.5 |
matplotlib | 3.4.3 |
numpy | 1.19.5 |
学习目录
- (一)使用matplotlib库绘制图表
- (二)使用秘钥加密图像
- 1:加密
- 2:解密(二合一)
- (三)位平面分解
- (四)色彩空间
- 1:色彩空间基本内容
- 2:色彩空间类型转换
- (五)结束语
(一)使用matplotlib库绘制图表
简介:matplotlib是Python最常用的绘图库,提供了一整套十分适合交互式绘图的命令具。
学习任务:简单使用matplotlib库创建画布并加载图片至画布
代码:
import matplotlib.pyplot as plt #导入模块#创建一个300*300*3的三维矩阵
img1 = np.ones((300,300,3),np.uint8)#在img1的基础上计算并创建等大矩阵
img2 = img1*80
img3 = img1*160
img4 = img1*255#加载图像至画布
plt.subplot(2,2,1)#在画布上创建行2,列2的四个区域,并指向区域1
plt.imshow(img1,'gray')#将img1加载至区域1
plt.title(1)#设置区域1的标题plt.subplot(2,2,2)#在画布上创建行2,列2的四个区域,并指向区域2
plt.imshow(img2,'gray')#将img2加载至区域2
plt.title(2)#设置区域2的标题plt.subplot(2,2,3)#在画布上创建行2,列2的四个区域,并指向区域3
plt.imshow(img3,'gray')#将img3加载至区域3
plt.title(3)#设置区域3的标题plt.subplot(2,2,4)#在画布上创建行2,列2的四个区域,并指向区域4
plt.imshow(img4,'gray')#将img4加载至区域4
plt.title(4)#设置区域4的标题#显示图像
plt.show()
运行结果:
(二)使用秘钥加密图像
原理:图像与手动生成的秘钥图像进行按位异或操作,实现加密,反之解密
作用:隐藏图像
扩展:利用简单的原理制作一个图像解码器
1:加密
import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread('./111.jpg',0)# 0 代表读入一张灰度图像# 2:构建秘钥图像
mask = np.random.randint(0,255,(img.shape),dtype = np.uint8)#深成一张img大小的uint8类型的矩阵# 3:加密
maskimg = cv2.bitwise_xor(img,mask)#逻辑位异或操作# 4:加载图片至画布
plt.subplot(121)
plt.imshow(maskimg,'gray')
plt.title("maskimg")
plt.show()
2:解密(二合一)
# 1:获取灰度图像
img = cv2.imread('./111.jpg',0)# 2:构建秘钥图像
mask = np.random.randint(0,255,(img.shape),dtype = np.uint8)# 3:加密
maskimg = cv2.bitwise_xor(img,mask)# 4:加载图片至画布
plt.subplot(121)
plt.imshow(maskimg,'gray')
plt.title("maskimg")# 二:解密
unmaskimg = cv2.bitwise_xor(maskimg,mask)# 5:加载图片至画布
plt.subplot(122)
plt.imshow(unmaskimg,'gray')
plt.title("unmaskimg")# 6:显示图像
plt.show()
运行结果:
(三)位平面分解
原理:逐一分解灰度图每个比特位的二进制像素值,得到八个二进制图效果:从第0个位平面到第7个位平面分别表现了对图像的不同影响
数学处理:按位与保留当前比特位
扩展:可将水印图片藏于影响最小的第0位面中,增加隐蔽性
import cv2
import matplotlib.pyplot as plt
import numpy as np """原理:逐一分解灰度图每个比特位的二进制像素值,得到八个二进制图效果:从第0个位平面到第7个位平面分别表现了对图像的不同影响数学处理:按位与保留当前比特位扩展:可将水印图片藏于任意一个位面图中,增加隐蔽性
"""
# 1:获取灰度图像
filename = './111.jpg'#保存图片路径
img = cv2.imread(filename,0)#以灰度的形式读取图片111# 2:构建提取矩阵
x,y = img.shape#获取行 列数
construction = np.ones((x,y,8),np.uint8)#构建x行,y列,8个通道的矩阵for i in range(8):construction[:,:,i] = 2**i#通过八次循环给每一个通道写入一张比特位图,从低位到高位# 3:提取位平面
for X in range(8):"""将每个通道的表和原图进行按位与"""construction[:,:,X] = cv2.bitwise_and(construction[:,:,X],img)
# 4:法制处理(获得黑白分明的二值图)
for X in range(8):saveimg = construction[:,:,X]>0construction[saveimg,X] = 255
# 5:显示图像
for i in range(8): plt.subplot(2,4,i+1)#将画布分为两行四列,当前图像显示到第i+1个区块plt.imshow(construction[:,:,i],cmap='gray')#把图像加载到plt画布中plt.title(i)#设置当前图像标题
plt.show()
运行结果:
(四)色彩空间
1:色彩空间基本内容
介绍:在处理图像的过程中,我们总是说RGB图像。在opencv中,RGB是一种比较常见的色彩空间类型,除此之外,还有一些其他的色彩空间,常见的如下:
色彩空间 | 内容 |
---|---|
GRAY | 灰度图【单一通道的图像】 |
XYZ | 更便于计算的色彩空间(常与RGB互相转换) |
Ycrcb | 加入了亮度的色彩空间 |
HSV | 人眼感知的模型[色调[0~360],饱和度[0 ~1],亮度[0 ~1]] |
HLS | 类型HSV[色调[0 ~360],亮度/明度[0 ~1],饱和度[0 ~1]] |
CIEL*a*b | 均匀色彩空间模型 |
CIEL*u*v | 适用于显示器显示和根据加色原理组合的场景 |
Bayer | 用于CCD和CMOS相机中的颜色空间 |
Bayer | 用于CCD和CMOS相机中的颜色空间 |
2:色彩空间类型转换
函数原型 | 参数 |
---|---|
cv2.cvtColor(src,code[,dstCn]) | src:输入图像 |
code:色彩空间转码【枚举】 | |
dstCn:被转码图像通道数 默认表示自动获取 |
|
返回值:输出转码图像 |
程序:
import cv2
import matplotlib.pyplot as plt
import numpy as np img = cv2.imread('./111.jpg')#读入一张RGB图x,y,n = img.shape
All = np.ones((x,y,3,4), dtype=np.uint8)#转为GRAY灰度色彩空间
All[:,:,0,0] = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转为CLE XYZ色彩空间
All[:,:,:,1] = cv2.cvtColor(img,cv2.COLOR_RGB2XYZ)
#转为HSV色彩空间
All[:,:,:,2] = cv2.cvtColor(img,cv2.COLOR_RGB2HSV)
#转为BGR色彩空间
All[:,:,:,3] = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)#加载图像至画布
for X in range(4):plt.subplot(2,2,X+1)if X ==0:plt.imshow(All[:,:,0,X],'gray')continueplt.imshow(All[:,:,:,X],'gray')#显示画布
plt.show()
运行结果:(可以看到不同的色彩空间效果不同)
(五)结束语
以上就是今天所要分享的内容了
学习路漫漫,我们仍需负重前行……
为此博主新创建了一个群,期待你们的加入:
QQ群:928357277
欢迎加入我们的大家庭:928357277
openCV专栏(二):基础计算实战+色彩空间转换相关推荐
- [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解
一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...
- 【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取
一.学习目标 了解图片的结构属性 了解如何捕获视频 了解waitkey的使用方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...
- [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充
一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...
- [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用
一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...
- [python opencv 计算机视觉零基础到实战] 六、图像运算
一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...
- [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容
一.学习目标 了解图片内容定位方法matchTemplate使用 了解minMaxLoc方法使用 上一篇<[python opencv 计算机视觉零基础到实战] 十.图片效果毛玻璃> 如有 ...
- [python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃
一.学习目标 了解高斯模糊的使用方法 了解毛玻璃的图片效果添加 了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九.模糊 如有错误欢迎指出~ 二.了解模糊与 ...
- [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑
一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...
- [python opencv 计算机视觉零基础到实战] 一 opencv的helloworld
前置条件 说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程:文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘 ...
- opencv python 识别视频水印_[python opencv 计算机视觉零基础到实战]二十二、给视频制作浮动的带感水印...
一.学习目标 了解浮游水印如何实现 了解鬼畜水印效果如何实现 二.了解使用OpenCV制作视频特效 2.1 读取视频 首先我们需要准备一个视频素材,我的路径是'D:\test\02.mp4',使用Vi ...
最新文章
- 深度学习笔记9 Sparse coding
- 《深入理解java虚拟机》笔记1——Java内存区域与Java对象
- Javascript中函数声明与函数表达式的不同
- ubuntu18.04安装python3_在 Ubuntu 18.04 上安装 Python 3.7
- java 设置文本颜色_设置文本中的字体的颜色
- 信息学奥赛C++语言:派送蛋糕
- linux+模块与设备关系,《Linux内核设计与实现》读书笔记 第十七章 设备与模块...
- 基于Simulink的机械式飞行操纵系统建模与仿真
- 计算机考试的话语,鼓励别人考试的句子
- Vue周日历展示大学课程
- STM8L USART串口调试
- 关于区块链的一些特有技术
- “暴跌”微博难翻身:用户数持续大降,豪赌视频号没胜算
- oracle试算平衡表查询,介绍一下余额试算平衡表的计算方法
- 推荐几款性价比高的优盘
- JAVA程序的逻辑控制及输入输出
- python找出3或者5的倍数_python – 3和5的倍数之和
- 解决Can't connect to HTTPS URL because the SSL module is not available.问题
- 国二python考试时间_计算机二级考试时间3月几号 2019全国计算机等级考试
- Unity读写飞控参数mavlink
热门文章
- java编写时间流逝_如何测量Java中的时间流逝?
- jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
- 计算机教室 设备负荷,设备建设标准和规范教室线缆布线.ppt
- vue 手机h5动态银行支付密码键盘前端
- 已知鸡兔的脚一共80只C语言,鸡兔同笼鸡比兔多10只但鸡脚却比兔脚少60只问鸡兔各几只...
- Linux中Qt环境编译链接依赖opencv库时报错
- [AS3 狂想曲 K.07] BlazeDS 入门及配置 [FL 车在臣]
- 计算机主机放电操作,如何给主板CMOS放电的3种方法图文教程
- Redis Cluster集群
- myeclipse当前页面的脚本发生错误问题