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专栏(二):基础计算实战+色彩空间转换相关推荐

  1. [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解

    一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...

  2. 【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取

    一.学习目标 了解图片的结构属性 了解如何捕获视频 了解waitkey的使用方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  3. [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

    一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...

  4. [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用

    一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  5. [python opencv 计算机视觉零基础到实战] 六、图像运算

    一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...

  6. [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容

    一.学习目标 了解图片内容定位方法matchTemplate使用 了解minMaxLoc方法使用 上一篇<[python opencv 计算机视觉零基础到实战] 十.图片效果毛玻璃> 如有 ...

  7. [python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃

    一.学习目标 了解高斯模糊的使用方法 了解毛玻璃的图片效果添加 了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九.模糊 如有错误欢迎指出~ 二.了解模糊与 ...

  8. [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑

    一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...

  9. [python opencv 计算机视觉零基础到实战] 一 opencv的helloworld

    前置条件 说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程:文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘 ...

  10. opencv python 识别视频水印_[python opencv 计算机视觉零基础到实战]二十二、给视频制作浮动的带感水印...

    一.学习目标 了解浮游水印如何实现 了解鬼畜水印效果如何实现 二.了解使用OpenCV制作视频特效 2.1 读取视频 首先我们需要准备一个视频素材,我的路径是'D:\test\02.mp4',使用Vi ...

最新文章

  1. 深度学习笔记9 Sparse coding
  2. 《深入理解java虚拟机》笔记1——Java内存区域与Java对象
  3. Javascript中函数声明与函数表达式的不同
  4. ubuntu18.04安装python3_在 Ubuntu 18.04 上安装 Python 3.7
  5. java 设置文本颜色_设置文本中的字体的颜色
  6. 信息学奥赛C++语言:派送蛋糕
  7. linux+模块与设备关系,《Linux内核设计与实现》读书笔记 第十七章 设备与模块...
  8. 基于Simulink的机械式飞行操纵系统建模与仿真
  9. 计算机考试的话语,鼓励别人考试的句子
  10. Vue周日历展示大学课程
  11. STM8L USART串口调试
  12. 关于区块链的一些特有技术
  13. “暴跌”微博难翻身:用户数持续大降,豪赌视频号没胜算
  14. oracle试算平衡表查询,介绍一下余额试算平衡表的计算方法
  15. 推荐几款性价比高的优盘
  16. JAVA程序的逻辑控制及输入输出
  17. python找出3或者5的倍数_python – 3和5的倍数之和
  18. 解决Can't connect to HTTPS URL because the SSL module is not available.问题
  19. 国二python考试时间_计算机二级考试时间3月几号 2019全国计算机等级考试
  20. Unity读写飞控参数mavlink

热门文章

  1. java编写时间流逝_如何测量Java中的时间流逝?
  2. jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
  3. 计算机教室 设备负荷,设备建设标准和规范教室线缆布线.ppt
  4. vue 手机h5动态银行支付密码键盘前端
  5. 已知鸡兔的脚一共80只C语言,鸡兔同笼鸡比兔多10只但鸡脚却比兔脚少60只问鸡兔各几只...
  6. Linux中Qt环境编译链接依赖opencv库时报错
  7. [AS3 狂想曲 K.07] BlazeDS 入门及配置 [FL 车在臣]
  8. 计算机主机放电操作,如何给主板CMOS放电的3种方法图文教程
  9. Redis Cluster集群
  10. myeclipse当前页面的脚本发生错误问题