opencv全面详解教程

2024-09-05 04:04
文章标签 opencv 教程 详解 全面

本文主要是介绍opencv全面详解教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

opencv全面详解教程

1. OpenCV 简介

2. 安装 OpenCV

2.1 使用pip安装(适用于Python)

2.2 通过conda安装

2.3 从源码编译(高级)

3. OpenCV 基本操作

3.1 读取和显示图像

3.2 保存图像

3.3 视频处理

4. 图像处理操作

4.1 调整大小和裁剪

4.2 颜色空间转换

4.3 图像平滑(滤波)

4.4 边缘检测

5. 形态学操作

6. 特征检测与匹配

6.1 角点检测(Harris)

6.2 SIFT、SURF、ORB

6.3 特征匹配

7. 对象检测与跟踪

7.1 使用Haar级联分类器进行人脸检测

7.2 目标跟踪(Meanshift和CAMshift)

8. 机器学习与深度学习

8.1 加载预训练模型

9. 高级应用:自动驾驶与实时系统

9.1 车道检测

10. 优化与调试

10.1 多线程处理

10.2 GPU加速

11. 总结与资源


🎈边走、边悟🎈迟早会好

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,它为开发者提供了丰富的功能,用于处理图像和视频。以下是对OpenCV的全面详解教程,包括基本介绍、安装、核心功能和高级应用。

1. OpenCV 简介

OpenCV 是一个跨平台的计算机视觉库,最初由Intel开发,现在由OpenCV.org维护。它提供了众多的函数库,涵盖了从基本的图像处理到复杂的机器学习和计算机视觉算法。OpenCV广泛应用于实时图像处理、计算机视觉研究、自动驾驶、医疗图像分析等领域。

2. 安装 OpenCV

OpenCV可以在多种操作系统上安装,包括Windows、macOS和Linux。安装方法多样,常见的有通过包管理器或从源码编译。

2.1 使用pip安装(适用于Python)
pip install opencv-python
pip install opencv-python-headless  # 如果不需要GUI功能
2.2 通过conda安装
conda install -c conda-forge opencv
2.3 从源码编译(高级)

从源码编译OpenCV可以获得自定义配置和最新功能,具体步骤包括克隆源码库、配置CMake、编译和安装。

git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
cd build
cmake ..
make -j8
sudo make install

3. OpenCV 基本操作

3.1 读取和显示图像
import cv2# 读取图像
image = cv2.imread('path_to_image.jpg')# 显示图像
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.2 保存图像
cv2.imwrite('output_image.jpg', image)
3.3 视频处理
# 打开视频文件
cap = cv2.VideoCapture('video.mp4')while cap.isOpened():ret, frame = cap.read()if not ret:break# 显示视频帧cv2.imshow('Video', frame)if cv2.waitKey(25) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

4. 图像处理操作

4.1 调整大小和裁剪
# 调整大小
resized_image = cv2.resize(image, (width, height))# 裁剪图像
cropped_image = image[y1:y2, x1:x2]
4.2 颜色空间转换
# BGR 转换为灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# BGR 转换为HSV
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
4.3 图像平滑(滤波)
# 高斯模糊
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)# 中值滤波
median_image = cv2.medianBlur(image, 5)
4.4 边缘检测
edges = cv2.Canny(gray_image, 100, 200)

5. 形态学操作

形态学操作用于图像中的结构元素处理,如腐蚀、膨胀、开运算、闭运算等。

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))# 腐蚀
eroded_image = cv2.erode(image, kernel, iterations=1)# 膨胀
dilated_image = cv2.dilate(image, kernel, iterations=1)# 开运算(先腐蚀后膨胀)
opening_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)# 闭运算(先膨胀后腐蚀)
closing_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

6. 特征检测与匹配

6.1 角点检测(Harris)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)# 标记角点
image[dst > 0.01 * dst.max()] = [0, 0, 255]
cv2.imshow('Corners', image)
6.2 SIFT、SURF、ORB
# SIFT
sift = cv2.SIFT_create()
keypoints, descriptors = sift.detectAndCompute(gray_image, None)# ORB (比SIFT快,且无专利限制)
orb = cv2.ORB_create()
keypoints, descriptors = orb.detectAndCompute(gray_image, None)
6.3 特征匹配
# 使用BFMatcher进行特征匹配
bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
matches = bf.match(descriptors1, descriptors2)# 按距离排序
matches = sorted(matches, key=lambda x: x.distance)# 绘制匹配结果
matched_image = cv2.drawMatches(image1, keypoints1, image2, keypoints2, matches[:10], None)
cv2.imshow('Matches', matched_image)

7. 对象检测与跟踪

7.1 使用Haar级联分类器进行人脸检测
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)cv2.imshow('Face Detection', image)
7.2 目标跟踪(Meanshift和CAMshift)
# 设置初始窗口位置
track_window = (x, y, w, h)# 计算直方图
roi = image[y:y+h, x:x+w]
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
roi_hist = cv2.calcHist([hsv_roi], [0], None, [180], [0, 180])
cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)# Meanshift跟踪
ret, track_window = cv2.meanShift(dst, track_window, term_crit)# CAMshift跟踪
ret, track_window = cv2.CamShift(dst, track_window, term_crit)

8. 机器学习与深度学习

OpenCV支持基本的机器学习算法(如K近邻、SVM、决策树等)以及与深度学习框架(如TensorFlow、PyTorch)的集成。

8.1 加载预训练模型
# 加载预训练的深度学习模型
net = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'res10_300x300_ssd_iter_140000.caffemodel')# 准备输入图像
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))# 进行前向传播
net.setInput(blob)
detections = net.forward()

9. 高级应用:自动驾驶与实时系统

9.1 车道检测

使用边缘检测、Hough变换和曲线拟合来检测道路中的车道线。

# 边缘检测
edges = cv2.Canny(gray_image, 50, 150)# Hough变换检测线条
lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=50, minLineLength=100, maxLineGap=10)# 绘制检测到的车道线
for line in lines:x1, y1, x2, y2 = line[0]cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)

10. 优化与调试

10.1 多线程处理
import threadingdef process_frame(frame):# 在新线程中处理帧passcap = cv2.VideoCapture(0)
while True:ret, frame = cap.read()if ret:threading.Thread(target=process_frame, args=(frame,)).start()cap.release()
cv2.destroyAllWindows()
10.2 GPU加速

OpenCV提供了对CUDA和OpenCL的支持,能够利用GPU加速图像处理任务。

# 使用CUDA进行加速
gpu_frame = cv2.cuda_GpuMat()
gpu_frame.upload(frame)# CUDA加速的滤波器
gpu_blurred = cv2.cuda.createGaussianFilter(cv2.CV_8UC1, cv2.CV_8UC1, (5, 5), 0)
result = gpu_blurred.apply(gpu_frame)

11. 总结与资源

OpenCV 是一个功能强大且广泛应用的图像处理和计算机视觉库。通过掌握其基本和高级功能,你可以实现从简单的图像处理到复杂的视觉任务,并将其应用到现实世界的项目中。

推荐资源

  • OpenCV 官方文档

通过持续学习和实践,你将能够更好地掌握OpenCV,并将其应用于各种计算机视觉和图像处理任务中。

 🌟感谢支持 听忆.-CSDN博客

🎈众口难调🎈从心就好

这篇关于opencv全面详解教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137897

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存