图像处理学习笔记(一)
哔哩哔哩:《黑马程序员人工智能教程_10小时学会图像处理OpenCV入门教程》
1 OpenCV简介:
1.1 图像处理简介:
1.图像是什么?
图:物体反射或透射光的分布
像:人的视觉系统所接受的图在人脑中所形成的印象或认识
2.模拟图像和数字图像?
模拟图像:连续存储的数据
数字图像:分级存储的数据
3.数字图像?
位数:图像的表示,常见是8位
分类:二值图像、灰度图像和彩色图像
1.2 OpenCV简介及安装方法:
OpenCV是一款由Intel公司俄罗斯团队发起并参与和维护的一个计算机视觉处理开源软件库,支持与计算机视觉和机器学习相关的众多算法。
优势:
- 编程语言:基于C++实现,提供python、MATLAB等语言接口,OpenCV-python是OpenCV的python API,结合了OpenCV C++ API和python语言的最佳特性。
- 跨平台:
- 活跃的开发团队
- 丰富的API:完善的传统计算机视觉算法,涵盖主流的机器学习算法,并同时添加了对深度学习的支持。
OpenCV-python:
- 是一个python绑定库,旨在解决计算机视觉问题。
- 使用numpy
OpenCV部署方法:
- 需要先安装numpy,matplotlib
- 创建虚拟环境
参考:https://www.jianshu.com/p/453184d63fb7
- 安装OpenCV-python,由于一些经典的算法被申请了版权,新版本有很大限制,所以选用3.4.3以下的版本
- (不过我用conda或者pip都找不到3.4.2.17的,索性就没加版本号,下载的是4.5的版本,先用着吧)
pip install opencv-python==3.4.2.17
conda install opencv-python==3.4.2.17
- 安装过程中一般会出现问题,请参考:
使用anaconda安装出现:PackagesNotFoundError: The following packages are not available from current channels
使用pip安装包时,出现Cannot unpack file xxx的问题的解决以及pip安装速度慢或出现readtime out问题的解决。
- 运行一下,看看有无毛病,我的可以了,真不戳。
import cv2
lena = cv2.imread('1.jpg')
cv2.imshow('image',lena)
cv2.waitKey(0)
- 如果我们要用SIFT和SURF进行特征提取,还需要安装:
pip install opencv-contrib-python==3.4.2.17
1.3 OpenCV的模块:
其中core、highgui、imgproc是最基础的模块,介绍如下:
- core模块实现了最核心的数据结构及其基本运算,如绘图函数、数组操作相关函数。
- highgui实现了视频与图像的读取、显示、存储等接口
- imgproc实现了图像处理的基础方法,包括图像滤波、图像的几何变换平滑、阈值分割、形态学处理、边缘检测、目标检测、运动分析和对象跟踪等。
总结:
-
opencv的模块:
core:最核心的数据结构
highgui:视频与图像的读取、显示、存储
imgproc:图像处理的基础方法
features2d:图像特征以及特征匹配
2 OpenCV基本操作:
主要内容:
- 图像的IO操作,读取和保存方法
- 在图像上绘制几何图形
- 获取图像的属性
- 访问图像的像素,进行通道分离、合并等
- 实现颜色空间的转换
- 图像的算术运算
2.1 图像的IO操作:
2.1.1 读取图像:
2.1.2 显示图像:
# opencv显示
import cv2
img = cv2.imread('1.jpg',0)
cv2.imshow('image',img)
cv2.waitKey(0)
# matplotlib显示
#img是以BGR通道顺序存储,而plt是以RGB的顺序,这里是要实现通道顺序转换
# plt.show(img[:,:,::-1])
2.1.3 保存图像:
2.1.4 完整代码:
import cv2 as cv
import matplotlib.pyplot as plt
# 1.读取图像
img = cv.imread('1.jpg',0)
# 2.显示图像
# 2.1 opencv显示
# cv.imshow('image',img)
# cv.waitKey(0)
# 2.2 matplotlib显示
plt.imshow(img,cmap=plt.cm.gray) #读取灰度图
plt.show()
# 3.图像保存
cv.imwrite('2.png',img)
2.2 绘制几何图形:
2.2.1 绘制直线:
2.2.2 绘制圆形:
2.2.3 绘制矩形:
2.2.4 在图像中添加文字:
2.2.5 效果展示:
生成一个全黑的图像,然后在里面绘制图像并添加文字
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 1.创建一个空白的图像
img = np.zeros((512,512,3),np.uint8)
# 2.绘制图形
cv.line(img,(0,0),(511,511),(255,0,