一、介绍
OpenCV(open source computer vision library)是一个基于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等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。
————————————————
二、编译环境
直接pip安装
pip install opencv-python
注意:
1.安装的是opencv_python,但在导入的时候是import cv2。
2.OpenCV依赖一些库,比如Numpy和matplotlib,先安装上。
三、图像基本操作
3.1 图像读取与显示
1 import cv2 2 import matplotlib.pyplot as plt 3 import numpy as np 4 5 # 读取图像,这个函数返回图像数据,它是一个NumPy数组。 6 image =cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\1.jpg') 7 8 # 显示图像 9 #cvtColor函数将图像从BGR颜色空间转换到RGB颜色空间。cv2.COLOR_BGR2RGB是转换的指定代码。 10 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) 11 # 如果命名为为中文,需要转码 12 plt.title('boy') 13 plt.axis('off') 14 plt.show()
3.2学习OpenCV中常见的图像操作,如调整大小、裁剪、旋转等。
1 image =cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\1.jpg') 2 3 # 这里展示了如何调整图像大小和进行裁剪 4 resized_image = cv2.resize(image, (1000, 2000)) 5 cropped_image = image[50:150, 50:250] 6 7 # 显示调整前的图像 8 plt.imshow(cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB)) 9 plt.title('Resized Image') 10 plt.axis('off') 11 plt.show() 12 13 # 显示裁剪后的图像 14 plt.imshow(cv2.cvtColor(cropped_image, cv2.COLOR_BGR2RGB)) 15 plt.title('Cropped Image') 16 plt.axis('off') 17 plt.show()
3.3学习使用OpenCV进行边缘检测,掌握Canny边缘检测算法。
1 image=cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\1.jpg') 2 # 这里展示了如何使用Canny算法进行边缘检测 3 edges = cv2.Canny(image, 100, 200) 4 ''' 5 这行代码使用OpenCV的Canny函数进行边缘检测。Canny算法是一种非常流行的边缘检测算法,因为它能够很好地在噪声抑制和边缘检测之间取得平衡。 6 该算法接受两个阈值参数(这里是100和200)来控制边缘检测的灵敏度。 7 较低的阈值用于捕获较弱的边缘,而较高的阈值则用于最终边缘检测中需要更强边缘响应的场合。 8 在Canny算法中,还会用到一种双阈值方法来检测强边缘和潜在的弱边缘,并通过强边缘来连接潜在的弱边缘,从而形成最终的边缘图像。 9 ''' 10 # 显示边缘检测结果 11 plt.imshow(edges, cmap='gray') 12 plt.title('Edge Detection') 13 plt.axis('off') 14 plt.show() 15 16 17 -------------------------- 18 什么边缘检测 19 边缘检测是计算机视觉和图像处理中的一个基本步骤,它旨在识别图像中亮度变化明显的点。这些点通常对应于物体的边界,在图像中形成了物体的轮廓。边缘检测对于后续的图像分析、图像分割、特征提取等任务非常重要。通过边缘检测,我们可以从图像中提取出重要的结构信息,这些信息对于理解图像内容、进行目标识别等任务非常有用。
3.4学习如何使用OpenCV拼接图像---Numpy (np.hstack,np.vstack)
只是简单地将几张图像直接堆叠而连成一张图像,并未对图像进行特征提取和边缘处理,因而并不能实现图像的全景拼接。
1 retval = np.hstack(tup) # 水平拼接 2 retval = np.vstack(tup) # 垂直拼接 3 4 5 ----------------------- 6 代码示例 7 # 读取要拼接的图片 8 img = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\4.jpg') 9 #调整图像大小 10 img = cv2.resize(img, None, fx=0.5, fy=0.5) # 为了完整显示,缩小一倍 11 blur2 = cv2.blur(img, (2, 2)) # 模糊处理 12 blur3 = cv2.blur(img, (5, 5)) 13 blur4 = cv2.blur(img, (10, 10)) 14 15 htich = np.hstack((img, blur2)) 16 htich2 = np.hstack((blur3, blur4)) 17 vtich = np.vstack((htich, htich2)) 18 19 # 显示图片 20 cv2.imshow("mergedDemo", vtich) 21 cv2.waitKey(0) 22 cv2.destroyAllWindows()
方式二:matplotlib
注意:opencv使用的是BGR
模式,而matplotlib使用的是RGB
模式,所以需要将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv的图像。
1 img1 = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\4.jpg', cv2.IMREAD_COLOR) # 以彩色模式读取图片。这是默认模式 2 img2 = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\5.jpg', cv2.IMREAD_GRAYSCALE) # 以灰度模式读取图片 3 img3 = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\6.jpg', 4 cv2.IMREAD_UNCHANGED) # 包括alpha通道的完整图片将被读取 5 img4 = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\3.jpg', cv2.IMREAD_ANYDEPTH) # 读取图片,无论其深度如何 6 # 将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv的图像 7 img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB) 8 img2 = cv2.cvtColor(img2, cv2.COLOR_GRAY2RGB) 9 img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2RGB) 10 img4 = cv2.cvtColor(img4, cv2.COLOR_BGR2RGB) 11 plt.rcParams['font.sans-serif'] = ['FangSong'] # 支持中文标签 12 # 使用matplotlib的plt.subplot()和plt.imshow()函数将转换后的图片显示在一个2x2的子图网格中 13 plt.subplot(221), plt.title("img1"), plt.axis('off') 14 plt.imshow(img1) 15 plt.rcParams['font.sans-serif'] = ['FangSong'] # 支持中文标签 16 plt.subplot(222), plt.title("img2"), plt.axis('off') 17 plt.imshow(img2) 18 plt.rcParams['font.sans-serif'] = ['FangSong'] # 支持中文标签 19 plt.subplot(223), plt.title("img3"), plt.axis('off') 20 plt.imshow(img3) 21 plt.rcParams['font.sans-serif'] = ['FangSong'] # 支持中文标签 22 plt.subplot(224), plt.title("img4"), plt.axis('off') 23 plt.imshow(img4) 24 plt.show()
标签:OpennCV,plt,image,imshow,cv2,边缘,图像 From: https://www.cnblogs.com/liuliu1/p/18360557