一.OpenCV初识
1.什么是OpenCV
- OpenCV:Open Source Computer Vision Library
2.什么是TensorFlow
- 谷歌研发的第二代人工智能学习系统,依靠张量和数据图来进行计算
- 即OpenCV适用的场景在TensorFlow上都适用
二.搭建OpenCV和TensorFlow一站式开发环境:Anaconda
1.什么是Anaconda
- TensorFlow和OpenCV的开发平台
2.Mac下搭建Anaconda
- 下载并安装anaconda软件
- 下载并安装TensorFlow和OpenCV环境的配置
- 在TensorFlow环境下,下载并安装notebook【以后Python语言在notebook下进行编辑】
三.测试案例Helloworld
1.搭建环境
- 在Anaconda中的Environment create一个新的环境,命名为tensorflow
- 在这个环境中安装tensorflow/opencv等相关库
- 在Home中安装notebook并launch
2.编写hello tensorflow
-
对于其他变量可以使用print直接打印,对于tensorflow只能借助session进行打印
-
创建python文件并编写
import tensorflow as tf hello = tf.constant('Hello tensorflow!') sess = tf.Session() print(sess.run(hello)) #执行结果:Hello tensorflow!
-
常量的定义
tf.constant('Hello tensorflow!')
-
创建session
sess = tf.Session()
-
打印
print(sess.run(hello))
-
通过验证,tensorflow插件安装没有问题
3.验证openCV插件安装没有问题
-
创建python文件并编写
import cv2 print('hello opencv') #执行结果:hello opencv
四.利用搭建的环境实现图片的读取和展示
1.实现图片的读取和展示
- 创建文件夹添加图片
- 在文件夹中添加Python文件
2.编写python文件思路
- opencv模块的引入
- 调用API实现需要的功能(图片的读取与展示)
- 程序的暂停stop(图片的读取是一瞬间的事儿,如果不停止则展示一下就会消失)
3.编写python文件
import cv2
img = cv2.imread('image0,jpg')#参数1:图片的名称 参数2:图片的类型(0-灰度图片,1-彩色图片)
#imread方法(返回图片的内容),具体操作如下
#1.方法实现图片的读取
#2.封装格式的解析
#3.数据解码
#4.数据的加载
cv2.imshow('image',img)#参数1:当前窗体的名称 参数2:需要展示的图片内容
cv2.waitKey(0)#实现程序的暂停
五.OpenCV第三方开发库
将OpenCV库的release版本下载下来从而查看对应的文件
1.模块介绍
- 所有的文件夹代表OpenCV中比较重要的模块
- calib3d模块:用于相机的校准和3d内容相关
- core模块:记录openCV中基础数据类型,矩阵操作,绘图相关,几乎和OpenCV所有基础相关内容
- dnn模块:和神经网络相关的模块
- features2d:和图像及焦点检测相关
- flann:和聚类相关,如聚类搜索算法等等
- highgui:与图形相关交互的
- imgcodecs和imgproc:描述与图像处理相关的,如图像的均衡化,颜色变换等
- ml:机器学习模块(如SVM支持向量机等等)
- objdetect:物体检测模块
- photo:图片的处理,如图片的修复、去燥
- shape很少用到
- stitching:用于大图像拼接
- video、videoio、videostab:三个video模块用于描述视频信息,如视频分解图像、图像合成视频等等
六.图片写入案例
1.图片读取案例的解析
- imread方法的具体操作
- 方法实现图片的读取
- 封装格式的解析
- 数据解码
- 数据的加载
- 常见的图片封装格式
- jpg
- png
- 图片的封装格式通常分成两部分看待
- 文件头【数据部分的解码信息及附加信息,解码器通过附加信息将图像还原成最原始的内容】
- 文件数据【不是图片的原始数据,而是图片经过压缩编码之后的数据】
- 不同的jpg/png的文件头和文件数据完全不同
- 为什么要进行压缩编码?
- 方便文件的存储和传输
2.根据自己需要的图片格式完成图片的写入功能
import cv2
img = cv2.imread('image0.jpg',1)
cv2.imwrite('image1.jpg',img)#参数1:保存的文件名 参数2:这里的img已经是解码之后的数据(原始数据)
#从而实现:创建了一个新的图片[即复制之前的图片]
七.不同图片质量保存案例
1.JPG图片格式的压缩实例代码
import cv2
img = cv2.imread('image0.jpg',1)
cv2.imwrite('imageTest.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,0])#参数3:当前图片的质量,jpg质量在0~100,有损压缩,以牺牲图片质量为代价
2.PNG图片格式的压缩实例代码
-
png相对于jpg格式的压缩特点
- jpg是有损压缩;png是无损压缩
- jpg没有办法设置图片的透明度;png有一个透明度属性,修改rgb值时还可以修改图片的透明度
- 对于jpg来说,数字越小,压缩比越高,图片质量损失严重,压缩范围0-100;对于png来说,数字越小,压缩比越低,压缩范围0-9
-
实例代码
import cv2 img = cv2.imread('image0.jpg',1) cv2.imwrite('imageTest.png',img,[cv2.IMWRITE_PNG_COMPRESSION,0])#COMPRESSION设置压缩比
八.像素操作基础
图片是由无数个像素点组成
1.什么是像素点
- 每一个像素点都可以使用RGB三种颜色分量来进行组合,如黄色由40%红色,40%绿色和40%组成,三种颜色深度是在0-255【8位,即2的八次方】
- 像素:就是图片放大看到的一个个方块
- 颜色深度:8bit的颜色深度表示的颜色范围在0-255,即256的三次方
2.像素点如何存储
- 图片在计算机中以二进制的方式进行存储,如黄色203 203 9【保存在计算机中就是11001011 11001011 00001001】
3.图片的宽高
- 如图片是640*480表示图片在水平方向上有640个像素点,垂直方向上有480个像素点
4.图片大小如何计算
- 如一张图片是1.14M,宽度是720,高度是547
- 位压缩图片的计算方法:
1.14M = 720*547(得到一张图片上的点像素)*3(每一个像素上有3个rgb颜色分量)*8bit(每一个分量是8位的颜色深度)/8(单位B,从bit转化成B)整体转成M则是1.14
- 对于PNG图片,每一个像素点除了RGB三个颜色分量之外,可能还有alpha通道,用于描绘图片的透明度
5.颜色存储格式
- 我们通常见到的图片存储格式除了RGB之外,还有BGR
- 什么是BGR?
- BGR第一个像素值不是红色,而是蓝色
- BGR中的b称为蓝色分量,g称为绿色分量,r称为红色分量,每一个颜色分量称之为一个颜色通道