当前位置: 首页 > wzjs >正文

心理网站 模版网站设计可以在手机上做吗

心理网站 模版,网站设计可以在手机上做吗,获取网站开发语言,服装企业网站建设的目的OpenCV 是计算机视觉领域超实用的开源库。它能帮你实现图像、视频处理,像实时检测人脸、跟踪目标、处理图像。无论是安防监控、自动驾驶,还是趣味手势识别,OpenCV 都能大显身手! 目录 一、背景 二、OpenCV 环境搭建 2.1 安装 P…

OpenCV 是计算机视觉领域超实用的开源库。它能帮你实现图像、视频处理,像实时检测人脸、跟踪目标、处理图像。无论是安防监控、自动驾驶,还是趣味手势识别,OpenCV 都能大显身手!

目录

一、背景

二、OpenCV 环境搭建

2.1 安装 Python

2.2 安装 OpenCV 库

三、OpenCV 基本操作

3.1 图像读取与显示

3.2 视频捕获与显示

四、实时目标检测

4.1 Haar 级联分类器

4.2 YOLO(You Only Look Once)

五、实时目标跟踪

5.1 KCF(Kernelized Correlation Filters)跟踪器

六、实时图像处理

6.1 图像滤波

6.2 边缘检测

七、实时应用案例

7.1 智能安防监控系统

7.2 手势识别系统

八、小结


一、背景

OpenCV 作为计算机视觉领域的开源库,凭借其丰富的算法和高效的性能,在实时应用开发中占据重要地位。实时应用要求系统能够在短时间内对输入数据进行处理并给出反馈,OpenCV 的多种功能正好满足了这些需求,如安防监控需快速检测目标,自动驾驶要实时识别道路信息等。

二、OpenCV 环境搭建

2.1 安装 Python

Python 是使用 OpenCV 的常用语言,其安装步骤如下:

步骤操作内容说明
1访问 Python 官方网站(Download Python | Python.org)可根据操作系统选择合适的 Python 版本,建议使用 Python 3.9 及以上版本
2下载对应操作系统的安装包如 Windows 选择.exe 文件,Linux 选择源码包或使用包管理器安装
3运行安装程序安装过程中勾选 “Add Python to PATH”,方便后续使用

2.2 安装 OpenCV 库

安装 OpenCV 库可通过 pip 命令完成,具体如下:

库名称安装命令用途
opencv - pythonpip install opencv - python基础的 OpenCV 库,包含核心功能
opencv - contrib - pythonpip install opencv - contrib - python包含额外的贡献模块,如一些实验性算法和功能

三、OpenCV 基本操作

3.1 图像读取与显示

import cv2# 读取图像
image = cv2.imread('test.jpg')# 显示图像
cv2.imshow('Image', image)# 等待按键事件
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()
函数作用参数说明
cv2.imread()读取图像文件第一个参数为图像文件路径,第二个参数可指定读取模式(如灰度模式等)
cv2.imshow()显示图像第一个参数为窗口名称,第二个参数为要显示的图像数据
cv2.waitKey()等待按键事件参数为等待时间(毫秒),0 表示无限等待
cv2.destroyAllWindows()关闭所有打开的窗口无参数

3.2 视频捕获与显示

import cv2# 打开摄像头
cap = cv2.VideoCapture(0)while True:# 读取一帧视频ret, frame = cap.read()if not ret:break# 显示帧cv2.imshow('Video', frame)# 按 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
函数作用参数说明
cv2.VideoCapture()打开视频捕获设备参数可以是摄像头编号(如 0 表示默认摄像头)或视频文件路径
cap.read()读取一帧视频返回两个值,ret 表示是否成功读取,frame 为读取的帧数据
cap.release()释放视频捕获设备无参数

四、实时目标检测

4.1 Haar 级联分类器

import cv2# 加载人脸分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')# 打开摄像头
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:break# 转换为灰度图像gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 检测人脸faces = face_cascade.detectMultiScale(gray, 1.1, 4)# 在检测到的人脸周围绘制矩形for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)# 显示帧cv2.imshow('Face Detection', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
步骤操作说明
1加载分类器使用 cv2.CascadeClassifier() 加载预训练的分类器文件
2读取视频帧利用 cv2.VideoCapture() 和 cap.read() 读取摄像头视频帧
3转换为灰度图像使用 cv2.cvtColor() 将彩色图像转换为灰度图像,提高检测效率
4目标检测调用 detectMultiScale() 方法进行目标检测,返回检测到的目标矩形框信息
5绘制矩形框使用 cv2.rectangle() 在检测到的目标周围绘制矩形框

4.2 YOLO(You Only Look Once)

import cv2
import numpy as np# 加载模型配置和权重文件
net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')# 加载类别名称
classes = []
with open('coco.names', 'r') as f:classes = [line.strip() for line in f.readlines()]# 打开摄像头
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:breakheight, width, _ = frame.shape# 准备输入图像blob = cv2.dnn.blobFromImage(frame, 1 / 255.0, (416, 416), swapRB=True, crop=False)net.setInput(blob)# 获取输出层名称output_layer_names = net.getUnconnectedOutLayersNames()# 前向传播outputs = net.forward(output_layer_names)boxes = []confidences = []class_ids = []# 处理输出结果for output in outputs:for detection in output:scores = detection[5:]class_id = np.argmax(scores)confidence = scores[class_id]if confidence > 0.5:center_x = int(detection[0] * width)center_y = int(detection[1] * height)w = int(detection[2] * width)h = int(detection[3] * height)x = int(center_x - w / 2)y = int(center_y - h / 2)boxes.append([x, y, w, h])confidences.append(float(confidence))class_ids.append(class_id)# 非极大值抑制indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)# 绘制检测结果font = cv2.FONT_HERSHEY_PLAINcolors = np.random.uniform(0, 255, size=(len(classes), 3))if len(indexes) > 0:for i in indexes.flatten():x, y, w, h = boxes[i]label = str(classes[class_ids[i]])confidence = str(round(confidences[i], 2))color = colors[class_ids[i]]cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)cv2.putText(frame, label + " " + confidence, (x, y + 20), font, 2, color, 2)# 显示帧cv2.imshow('YOLO Object Detection', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
步骤操作说明
1加载模型和类别用 cv2.dnn.readNet() 加载模型配置和权重文件,读取类别名称文件
2读取视频帧同 Haar 级联分类器
3准备输入图像使用 cv2.dnn.blobFromImage() 对图像进行预处理
4前向传播调用 net.forward() 进行推理,得到输出结果
5处理输出结果筛选出置信度高于阈值的检测结果,记录矩形框、置信度和类别信息
6非极大值抑制使用 cv2.dnn.NMSBoxes() 去除重叠的检测框
7绘制检测结果在图像上绘制矩形框和类别标签

五、实时目标跟踪

5.1 KCF(Kernelized Correlation Filters)跟踪器

import cv2# 打开摄像头
cap = cv2.VideoCapture(0)# 读取第一帧
ret, frame = cap.read()# 选择跟踪区域
bbox = cv2.selectROI(frame, False)# 创建 KCF 跟踪器
tracker = cv2.TrackerKCF_create()# 初始化跟踪器
tracker.init(frame, bbox)while True:ret, frame = cap.read()if not ret:break# 更新跟踪器success, bbox = tracker.update(frame)# 绘制跟踪结果if success:(x, y, w, h) = [int(v) for v in bbox]cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)else:cv2.putText(frame, "Tracking failed", (100, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)# 显示帧cv2.imshow('KCF Tracking', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
步骤操作说明
1打开摄像头并读取第一帧同前面视频处理操作
2选择跟踪区域使用 cv2.selectROI() 让用户手动选择要跟踪的目标区域
3创建并初始化跟踪器使用 cv2.TrackerKCF_create() 创建 KCF 跟踪器,并使用第一帧和选择的区域进行初始化
4跟踪目标在后续帧中调用 tracker.update() 更新跟踪器状态,获取新的跟踪区域
5绘制跟踪结果根据跟踪结果在图像上绘制矩形框或显示跟踪失败信息

六、实时图像处理

6.1 图像滤波

import cv2
import numpy as np# 打开摄像头
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:break# 均值滤波blurred = cv2.blur(frame, (5, 5))# 高斯滤波gaussian_blurred = cv2.GaussianBlur(frame, (5, 5), 0)# 显示原始图像和滤波后的图像cv2.imshow('Original', frame)cv2.imshow('Blurred', blurred)cv2.imshow('Gaussian Blurred', gaussian_blurred)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
滤波类型函数作用参数说明
均值滤波cv2.blur()平滑图像,去除噪声第一个参数为输入图像,第二个参数为滤波核大小
高斯滤波cv2.GaussianBlur()更有效地去除高斯噪声第一个参数为输入图像,第二个参数为滤波核大小,第三个参数为高斯核标准差

6.2 边缘检测

import cv2# 打开摄像头
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:break# 转换为灰度图像gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# Canny 边缘检测edges = cv2.Canny(gray, 100, 200)# 显示原始图像和边缘检测结果cv2.imshow('Original', frame)cv2.imshow('Edges', edges)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
步骤操作说明
1读取视频帧同前面视频处理操作
2转换为灰度图像减少计算量,便于边缘检测
3边缘检测使用 cv2.Canny() 进行边缘检测,两个阈值参数用于控制边缘的检测灵敏度
4显示结果显示原始图像和边缘检测后的图像

七、实时应用案例

7.1 智能安防监控系统

import cv2
import time# 加载人脸分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')# 打开摄像头
cap = cv2.VideoCapture(0)# 初始化视频写入器
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = Nonewhile True:ret, frame = cap.read()if not ret:break# 转换为灰度图像gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 检测人脸faces = face_cascade.detectMultiScale(gray, 1.1, 4)if len(faces) > 0:if out is None:# 开始录制视频out = cv2.VideoWriter('alert_video.avi', fourcc, 20.0, (frame.shape[1], frame.shape[0]))start_time = time.time()# 在检测到的人脸周围绘制矩形for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)# 写入视频帧out.write(frame)# 录制时间超过 10 秒,停止录制if time.time() - start_time > 10:out.release()out = Noneelse:if out is not None:out.release()out = None# 显示帧cv2.imshow('Smart Surveillance', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
if out is not None:out.release()
cv2.destroyAllWindows()
步骤操作说明
1加载分类器和打开摄像头同 Haar 级联分类器部分
2初始化视频写入器使用 cv2.VideoWriter_fourcc() 和 cv2.VideoWriter() 初始化视频写入器
3检测人脸利用 Haar 级联分类器检测人脸
4录制视频当检测到人脸时开始录制视频,录制时间超过 10 秒停止录制
5显示帧实时显示视频帧

7.2 手势识别系统

import cv2
import numpy as np# 打开摄像头
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:break# 定义手势区域roi = frame[100:300, 100:300]# 转换为灰度图像gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)# 高斯滤波blurred = cv2.GaussianBlur(gray, (5, 5), 0)# 阈值处理_, thresh = cv2.threshold(blurred, 127, 255, cv2.THRESH_BINARY_INV)# 查找轮廓contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)if len(contours) > 0:# 找到最大的轮廓cnt = max(contours, key=cv2.contourArea)# 计算凸包hull = cv2.convexHull(cnt)# 绘制轮廓和凸包cv2.drawContours(roi, [cnt], 0, (0, 255, 0), 2)cv2.drawContours(roi, [hull], 0, (0, 0, 255), 2)# 计算凸包缺陷hull = cv2.convexHull(cnt, returnPoints=False)defects = cv2.convexityDefects(cnt, hull)if defects is not None:count_defects = 0for i in range(defects.shape[0]):s, e, f, d = defects[i, 0]start = tuple(cnt[s][0])end = tuple(cnt[e][0])far = tuple(cnt[f][0])# 计算三角形的边长a = np.sqrt((end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2)b = np.sqrt((far[0] - start[0]) ** 2 + (far[1] - start[1]) ** 2)c = np.sqrt((end[0] - far[0]) ** 2 + (end[1] - far[1]) ** 2)# 计算角度angle = np.arccos((b ** 2 + c ** 2 - a ** 2) / (2 * b * c)) * 180 / np.piif angle <= 90:count_defects += 1cv2.circle(roi, far, 5, (0, 0, 255), -1)# 根据缺陷数量判断手势if count_defects == 0:cv2.putText(frame, "Closed Fist", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)elif count_defects == 1:cv2.putText(frame, "One Finger", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)elif count_defects == 2:cv2.putText(frame, "Two Fingers", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)elif count_defects == 3:cv2.putText(frame, "Three Fingers", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)elif count_defects == 4:cv2.putText(frame, "Four Fingers", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)else:cv2.putText(frame, "Open Hand", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 显示帧cv2.imshow('Gesture Recognition', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
步骤操作说明
1打开摄像头并读取帧同前面视频处理操作
2定义手势区域从视频帧中选取特定区域进行手势识别
3图像预处理转换为灰度图像、高斯滤波、阈值处理
4查找轮廓和凸包使用 cv2.findContours() 查找轮廓,cv2.convexHull() 计算凸包
5计算凸包缺陷通过 cv2.convexityDefects() 计算凸包缺陷,根据缺陷数量判断手势
6显示结果在图像上显示识别出的手势信息

八、小结

OpenCV 在实时应用开发中具有强大的功能和广泛的应用场景。通过本文介绍的环境搭建、基本操作、目标检测、跟踪、图像处理以及应用案例等内容,开发者可以利用 OpenCV 快速实现各种实时应用。在实际开发中,可根据具体需求选择合适的算法和技术,并不断优化以提高应用性能。


文章转载自:

http://BHoIwcD2.nfgbf.cn
http://n3jCGf8A.nfgbf.cn
http://qTIYEPsm.nfgbf.cn
http://yZJ11Khg.nfgbf.cn
http://RQtkN9XX.nfgbf.cn
http://6xILaYFf.nfgbf.cn
http://f30mXm1z.nfgbf.cn
http://fWpx7F22.nfgbf.cn
http://5myYAecU.nfgbf.cn
http://Y74rbOqa.nfgbf.cn
http://bl9QYyRB.nfgbf.cn
http://kOLvCmnq.nfgbf.cn
http://MDMGKVKk.nfgbf.cn
http://wbjiFVDz.nfgbf.cn
http://xOc1BEzO.nfgbf.cn
http://2lQlt8i1.nfgbf.cn
http://5OTIjnus.nfgbf.cn
http://AaHy6W0y.nfgbf.cn
http://blMjNKUP.nfgbf.cn
http://Vq1kCVgj.nfgbf.cn
http://GkCosbNz.nfgbf.cn
http://9wTPGm1F.nfgbf.cn
http://vWS3A6X4.nfgbf.cn
http://K089wgge.nfgbf.cn
http://YLn9IalD.nfgbf.cn
http://bOh1Xe9O.nfgbf.cn
http://4uvNdMzu.nfgbf.cn
http://QlmA7PW4.nfgbf.cn
http://u0KX6deO.nfgbf.cn
http://cJxvqn9o.nfgbf.cn
http://www.dtcms.com/wzjs/633467.html

相关文章:

  • 企业对企业的网站我公司是做网站开发的怎么纳税
  • 网站内部的信息安全建设网站建设排名奇艺地域
  • 长宁区网站建设设计手机网站 横屏
  • 邢台专业网站建设公司校园网络规划
  • .asp网站怎么做电商平台规则
  • 白熊阅读做网站架构wordpress怎么拷贝
  • 个人网站 虚拟主机价格年报申报入口官网
  • 建设网站视频百度云盘wordpress视差插件
  • asp手机网站源码上海自助建网站
  • 不用php做网站海南网站建设介绍
  • 江西冰溪建设集团网站这几年做那个网站致富
  • 南京做南京华美整容网站建设银行嘉兴分行官方网站
  • 已有域名 搭建网站wordpress自适应手机主题
  • 东阳网站优化网络媒体广告代理
  • 企业免费网站建设网站的HTML代码
  • 云梦网站开发wordpress系统介绍
  • 淘宝客怎么做的网站推广it培训班出来现状
  • dedecms网站信息统计WordPress为啥这么慢
  • 个人网站制作申请制作网页时用的最多的图像格式
  • 安娜尔返利机器人怎么做网站手机网站设计框架
  • 天津做网站设计公司找设计网站公司
  • cms建站详细教程wordpress小程序推荐
  • 网站开发基本流程图最大的域名注册网站是那个
  • 网站建设心得体会范文网站开发静态和动态
  • seo网站建设技巧百度风云榜官网
  • wordpress 做大网站wordpress 音乐盒
  • 河南省工程建设协会网站最简单的cms网站怎么做
  • 购物类网站都有哪些模块外包seo公司
  • 南京科技网站设计有特点活动发布类网站开发
  • 工信部企业网站备案系部网站建设需求分析运行需求