计算机视觉处理----OpenCV(OpenCV介绍、基本操作)_opencv是干什么的
一、OpenCV介绍
1.1、解释
OpenCV(全称:Open Source Computer Vision Library)是一个开源的计算机视觉库, 旨在通过计算机进行图像和视频处理。
1.2、特点
跨平台支持:OpenCV支持Windows、Linux、macOS等多个操作系统,可以与Python、C++、Java等多种编程语言结合使用。
丰富的功能:提供了大量函数和工具,涵盖图像处理、特征提取、机器学习、目标检测、图像分类等任务。
高性能:OpenCV经过高度优化,适用于大规模图像和视频数据处理,尤其在嵌入式系统和实时应用中表现突出。
1.3、主要功能
图像处理:包括图像的缩放、裁剪、旋转、颜色转换、平滑、边缘检测、直方图均衡化、二值化等操作。
特征检测和描述:OpenCV提供了诸如SIFT、SURF、ORB、FAST等算法,用于检测图像中的关键点,并提取其特征描述符。
目标检测和跟踪:可以实现Haar级联检测、人脸识别、行人检测以及物体跟踪等功能。
视频分析:包括运动检测、跟踪和分类等。
三维重建:通过多张2D图像,重建出3D模型,包括立体视觉和点云生成等功能。
图像分割:将图像分成若干个区域,每个区域都具有相似的属性,如颜色、纹理等。 机器学习与
深度学习: 提供机器学习算法(如SVM、KNN、神经网络等)接口,支持深度学习模型的加载和推理。
1.4、应用领域
自动驾驶:在自动驾驶中,OpenCV可用于道路检测、车辆检测、行人检测等任务。
医学影像处理:在医学领域,OpenCV可以用于医学影像处理,如医学图像分割、医学 图像配准、医学图像增强等。
安防领域:用于实现人脸识别、行人检测、异常行为检测等安防任务。
工业自动化:用于实现产品质量检测、生产线自动化等任务。
无人机技术:在无人机技术中,OpenCV可用于实现目标跟踪、地形识别等任务。
二、基本架构分析
2.1、核心模块
Opencv核心的所有模块:
opencv/modules at 4.x · opencv/opencv · GitHub
三、开发环境搭建
conda 查看安装源
conda config --show-sources
修改conda 默认安装源,请执行如下指令:
# 移除conda 默认安装源conda config --remove channels defaults# 安装清华安装源conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/conda config --set show_channel_urls yes
安装opencv
pip install opencv-python
官方地址:
OpenCV - Open Computer Vision Library
四、基本操作
4.1、图像读取
OpenCV用于读取图像的函数为:imread(),该函数支持、PNG、JPEG和TIFF等格式图像 文件。
cv.imread(filename[, flags]) ->retvalcv.imread(filename[, dst[, flags]]) ->dst
import cv2img=cv2.imread(\'./images/pands.png\',cv2.IMREAD_REDUCED_COLOR_4)print(type(img))#输出数据类型# print(img)#输出图像数组print(img.shape)#输出数组形状(135, 136, 3)print(img.dtype)#输出数组元素的数据类型uint8print(img.size)#输出数组元素的个数55080 135*136*3
4.2、显示图像
在指定窗口中显示图像。
函数 imshow 在指定窗口中显示图像。如果窗口是使用 cv::WINDOW_AUTOSIZE 标志创建的,则图像将以其原始大小显示,但它仍受屏幕分辨率的限制。否则,将缩放图像以适合窗口。
cv.imshow(winname, mat) ->None
注意
此函数后应调用 cv::waitKey 或 cv::p ollKey 来执行 GUI 内务处理任务,这些任务是实际显示给定图像并使窗口响应鼠标和键盘事件所必需的。否则,它不会显示图像,并且窗口可能会锁定。例如,waitKey(0) 将无限显示窗口,直到任意一个键(适合图像显示)。waitKey(25) 将显示一个帧,并等待大约 25 ms 的按键作(适用于逐帧显示视频)。要删除窗口,请使用 cv::d estroyWindow。
[仅限 Windows 后端]按 Ctrl+C 会将图像复制到剪贴板。按 Ctrl+S 将显示一个对话框以保存图像。
[仅限 Wayland 后端]支持格式已扩展。
- 如果图像是 8 位签名的,则像素将偏移 128。也就是说,值范围 [-128,127] 映射到 [0,255]。
- 如果图像是 16 位签名的,则像素将除以 256 并偏移 128。也就是说,值范围 [-32768,32767] 映射到 [0,255]。
import cv2img=cv2.imread(\'./images/pands.png\',cv2.IMREAD_REDUCED_COLOR_2) cv2.imshow(\'lena\',img) key = cv2.waitKey(0)#显示图像# 如果按下的键是\'q\',则退出程序if (key == ord(\'q\')): # ord(\'q\')将字符\'q\'转换为对应的ASCII码 exit()
4.3、图像窗口操作
4.3.1、创建显示窗口
cv.namedWindow(winname[, flags]) ->None
import cv2cv2.namedWindow(\"img\",cv2.WINDOW_AUTOSIZE)img = cv2.imread(\"./images/pands.png\",cv2.IMREAD_COLOR )cv2.imshow(\"img\",img)key = cv2.waitKey(0)if key == ord(\'q\'): # 销毁窗口 cv2.destroyAllWindows()
4.3.2、窗口大小调整
cv.resizeWindow(winname, width, height) ->Nonecv.resizeWindow(winname, size) ->None
window_name: 将显示图像/视频的窗口的名称
width:新窗口宽度(整数类型)
height: 新窗口高度(整数类型)
import cv2img = cv2.imread(\"./images/pands.png\",cv2.IMREAD_COLOR )cv2.imshow(\"img\",img)cv2.namedWindow(\"img\",cv2.WINDOW_AUTOSIZE)cv2.resizeWindow(\"img\",200,400)key = cv2.waitKey(0)if key == ord(\'q\'): # 销毁窗口 cv2.destroyAllWindows()
4.3.3、关闭窗口
cv.destroyAllWindows() ->None
您可以调用destroyWindow()或destroyAllWindows()来关闭窗口并取消分配任何 相关的内存使用。
4.3.4、等待键盘录入
函数 waitKey 无限等待 key 事件(当delay < 0)或 delay 毫秒数(当它为正数时)。由于作系统在切换线程之间有最短时间,因此该函数不会完全等待延迟毫秒,它至少会等待延迟毫秒,具体取决于当时计算机上正在运行的其他内容。它返回所按下的键的代码,如果在指定时间过去之前没有按下任何键则返回 -1。要检查是否按下了某个键但不等待它,请使用 polKey。
cv.waitKey([, delay]) ->retval
注意
函数 waitKey 和 pollKey 是 HighGUI 中唯一可以获取和处理 GUI 事件的方法,因此需要定期调用其中一个函数以进行正常的事件处理,除非在负责事件处理的环境中使用 HighGUI。
仅当至少创建了一个 HighGUI 窗口并且该窗口处于活动状态时,该功能才有效。如果有多个 HighGUI 窗口,则其中任何一个窗口都可以处于活动状态。