OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。
在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。
1、计算机视觉领域方向
1、人机互动
2、物体识别
3、图像分割
4、人脸识别
5、动作识别
6、运动跟踪
7、机器人
8、运动分析
9、机器视觉
10、结构分析
11、汽车安全驾驶
2、计算机操作底层技术
图像数据的操作: 分配、释放、复制、设置和转换。 图像是视频的输入输出I/O ,文件与摄像头的输入、图像和视频文件输出)。
矩阵和向量的操作以及线性代数的算法程序:矩阵积、解方程、特征值以及奇异值等。
各种动态数据结构:列表、队列、集合、树、图等。
基本的数字图像处理:滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等。
结构分析:连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合、Delaunay 三角划分等。
摄像头定标:发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计、立体对应。
运动分析:光流、运动分割、跟踪。
目标识别:特征法、隐马尔可夫模型:HMM。
基本的GUI:图像与视频显示、键盘和鼠标事件处理、滚动条。
图像标注:线、二次曲线、多边形、画文字。
1、读取图像:
cv2.imread()
#读取图像 IMREAD_COLOR:读入一副彩色图像。IMREAD_GRAYSCALE:以灰度模式读入图像
img = cv2.imread("1.jpg",cv2.IMREAD_COLOR)
2、显示图像:
cv2.imshow()
#显示图像(窗口名字,要显示的图片)
cv2.imshow("picture",img)
3、保存图像:
cv2.imwrite()
cv2.imwrite('messigray.png',img)
完整代码:
'''
使用opencv 显示图像
'''
import cv2
if __name__ == "__main__":
#读取图像 IMREAD_COLOR:读入一副彩色图像。IMREAD_GRAYSCALE:以灰度模式读入图像
img = cv2.imread("1.jpg",cv2.IMREAD_COLOR)
#显示图像(窗口名字,要显示的图片)
cv2.imshow("picture",img)
k = cv2.waitKey(0)
# 按下esc不保存退出
if k == 27:
cv2.destroyAllWindows()
# 按下ctrl+s 保存退出
elif k == ord('s'):
cv2.imwrite('messigray.png', img)
cv2.destroyAllWindows()
结果展示:
4、使用 Matplotlib显示图片
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
注意此处需要用到 matplotlib 库,记得使用pip install matplotlib下载安装。(如果使用pip下载较慢,建议更改pip镜像源。)
不会更改镜像源的请参考:https://blog.csdn.net/weixin_40928253/article/details/89786547
代码如下:
'''
使用 Matplotlib显示图片
'''
import cv2
from matplotlib import pyplot as plt
if __name__ == "__main__":
img = cv2.imread('1.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()
5、使用 Matplotlib显示图片并进行一些操作
import cv2
from matplotlib import pyplot as plt
if __name__ == "__main__":
img = cv2.imread('2.jpg')
edges = cv2.Canny(img,100,200)
plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show()
效果如下:
关于opencv对图片的操作暂时只了解到这么多。 :)