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

红色企业网站模板注册一家公司要花多少钱

红色企业网站模板,注册一家公司要花多少钱,做羞羞网站,网站地址和网页地址一、代码概述 此代码利用 OpenCV 库实现了基于特征匹配的实时物体检测系统。通过摄像头捕获实时视频帧,将其与预先加载的参考图像进行特征匹配,从而识别出视频帧中是否存在与参考图像匹配的物体。 二、环境依赖 OpenCV:用于图像处理、特征提…
一、代码概述

此代码利用 OpenCV 库实现了基于特征匹配的实时物体检测系统。通过摄像头捕获实时视频帧,将其与预先加载的参考图像进行特征匹配,从而识别出视频帧中是否存在与参考图像匹配的物体。

二、环境依赖

  • OpenCV:用于图像处理、特征提取和匹配等操作。
  • NumPy:用于数值计算,OpenCV 依赖于 NumPy 进行数组操作。

可以使用以下命令安装所需库:

bash

pip install opencv-python numpy

三、代码详细解释
1. 导入必要的库

python

import cv2
import numpy as np

  • cv2:OpenCV 库,用于计算机视觉任务。
  • np:NumPy 库,用于高效的数值计算。
2. 初始化摄像头

python

cap = cv2.VideoCapture(0)

  • cv2.VideoCapture(0):打开默认的摄像头设备(通常为计算机内置摄像头),用于捕获实时视频帧。
3. 加载所有参考图像

python

reference_images = []
for img_name in ['Black speaker.jpg', 'remote.jpg', 'fan.jpg', 'tempo.jpg']:img_path = f'Target_object/{img_name}'img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)if img is None:print(f"无法加载图像: {img_path}")continue# 图像预处理img = cv2.GaussianBlur(img, (5, 5), 0)img = cv2.equalizeHist(img)# 存储图像信息reference_images.append({'name': img_name,'image': img,'kp': None,'des': None})

  • 遍历指定的参考图像文件名列表,尝试从 Target_object 文件夹中加载图像。
  • cv2.imread:以灰度模式读取图像。
  • cv2.GaussianBlur:对图像进行高斯模糊处理,以减少噪声。
  • cv2.equalizeHist:对图像进行直方图均衡化,增强图像的对比度。
  • 将处理后的图像信息存储在 reference_images 列表中,每个元素是一个字典,包含图像名称、图像数据、关键点和描述符。
4. 初始化 SIFT 特征检测器

python

sift = cv2.SIFT_create(nfeatures=1000)

  • cv2.SIFT_create:创建一个 SIFT(尺度不变特征变换)特征检测器,nfeatures=1000 表示最多检测 1000 个特征点。
5. 提取所有参考图像特征

python

for ref in reference_images:ref['kp'], ref['des'] = sift.detectAndCompute(ref['image'], None)

  • 遍历 reference_images 列表,对每个参考图像使用 SIFT 检测器提取关键点(kp)和描述符(des)。
6. 设置匹配阈值

python

MATCH_THRESHOLD = 100

  • MATCH_THRESHOLD:用于判断是否匹配成功的阈值,当匹配的特征点数量超过该阈值时,认为检测到匹配的物体。
7. 主循环:实时物体检测

python

while True:# 读取摄像头帧ret, frame = cap.read()if not ret:break# 转换为灰度图像并进行预处理gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)gray_frame = cv2.GaussianBlur(gray_frame, (5, 5), 0)gray_frame = cv2.equalizeHist(gray_frame)# 提取当前帧特征kp2, des2 = sift.detectAndCompute(gray_frame, None)# 特征匹配if des2 is not None:# 使用FLANN匹配器FLANN_INDEX_KDTREE = 1index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)search_params = dict(checks=100)flann = cv2.FlannBasedMatcher(index_params, search_params)# 遍历所有参考图像for ref in reference_images:if ref['des'] is None:continuetry:matches = flann.knnMatch(ref['des'], des2, k=2)# 检查是否有足够匹配对if len(matches) < 1 or len(matches[0]) < 2:continue# 应用比率测试good_matches = [m for m,n in matches if m.distance < 0.7*n.distance]# 如果匹配点超过阈值if len(good_matches) > MATCH_THRESHOLD:print(f"检测到匹配物体: {ref['name']}")cv2.putText(frame, f"Match: {ref['name']}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 可视化匹配结果match_img = cv2.drawMatches(ref['image'], ref['kp'],frame, kp2,good_matches[:50], None,flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)cv2.imshow('Matches', match_img)breakexcept Exception as e:print(f"匹配错误: {str(e)}")continue# 显示结果cv2.imshow('Object Detection', frame)# 按q退出if cv2.waitKey(1) & 0xFF == ord('q'):break

  • cap.read():从摄像头读取一帧图像。
  • cv2.cvtColor:将彩色图像转换为灰度图像。
  • sift.detectAndCompute:对当前帧提取关键点和描述符。
  • cv2.FlannBasedMatcher:使用 FLANN(快速最近邻搜索库)匹配器进行特征匹配。
  • flann.knnMatch:对参考图像的描述符和当前帧的描述符进行 k 近邻匹配,k=2 表示为每个查询描述符找到两个最近邻。
  • 应用比率测试(m.distance < 0.7*n.distance)筛选出好的匹配点。
  • 如果好的匹配点数量超过 MATCH_THRESHOLD,则认为检测到匹配的物体,在帧上绘制匹配信息并显示匹配结果图像。
  • cv2.imshow:显示当前帧和匹配结果图像。
  • cv2.waitKey(1) & 0xFF == ord('q'):等待用户按下 q 键退出循环。
8. 释放资源

python

cap.release()
cv2.destroyAllWindows()

  • cap.release():释放摄像头资源。
  • cv2.destroyAllWindows():关闭所有 OpenCV 窗口。
四、注意事项

  • 确保 Target_object 文件夹存在,并且包含指定的参考图像文件。
  • SIFT 算法在 OpenCV 4.x 版本中需要额外安装 opencv-contrib-python 库,因为它属于非免费的专利算法。
  • 特征匹配的准确性受光照、物体姿态、遮挡等因素的影响,可以根据实际情况调整匹配阈值和预处理步骤。

完整代码:

import cv2
import numpy as np# 初始化摄像头
cap = cv2.VideoCapture(0)# 加载所有参考图像
reference_images = []
for img_name in ['Black speaker.jpg', 'remote.jpg', 'fan.jpg', 'tempo.jpg']:img_path = f'Target_object/{img_name}'img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)if img is None:print(f"无法加载图像: {img_path}")continue# 图像预处理img = cv2.GaussianBlur(img, (5, 5), 0)img = cv2.equalizeHist(img)# 存储图像信息reference_images.append({'name': img_name,'image': img,'kp': None,'des': None})# 初始化SIFT特征检测器
sift = cv2.SIFT_create(nfeatures=1000)# 提取所有参考图像特征
for ref in reference_images:ref['kp'], ref['des'] = sift.detectAndCompute(ref['image'], None)# 设置匹配阈值
MATCH_THRESHOLD = 100while True:# 读取摄像头帧ret, frame = cap.read()if not ret:break# 转换为灰度图像并进行预处理gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)gray_frame = cv2.GaussianBlur(gray_frame, (5, 5), 0)gray_frame = cv2.equalizeHist(gray_frame)# 提取当前帧特征kp2, des2 = sift.detectAndCompute(gray_frame, None)# 特征匹配# 在特征匹配部分添加调试信息if des2 is not None:for ref in reference_images:if ref['des'] is None:continuetry:matches = flann.knnMatch(ref['des'], des2, k=2)print(f"参考图像 {ref['name']} 的匹配点数量: {len(matches)}")if len(matches) < 1 or len(matches[0]) < 2:continuegood_matches = [m for m,n in matches if m.distance < 0.7*n.distance]print(f"参考图像 {ref['name']} 的良好匹配点数量: {len(good_matches)}")if len(good_matches) > MATCH_THRESHOLD:print(f"检测到匹配物体: {ref['name']}")cv2.putText(frame, f"Match: {ref['name']}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)match_img = cv2.drawMatches(ref['image'], ref['kp'], frame, kp2, good_matches[:50], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)cv2.imshow('Matches', match_img)breakexcept Exception as e:print(f"匹配错误: {str(e)}")continue# 使用FLANN匹配器FLANN_INDEX_KDTREE = 1index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)search_params = dict(checks=100)flann = cv2.FlannBasedMatcher(index_params, search_params)# 遍历所有参考图像for ref in reference_images:if ref['des'] is None:continuetry:matches = flann.knnMatch(ref['des'], des2, k=2)# 检查是否有足够匹配对if len(matches) < 1 or len(matches[0]) < 2:continue# 应用比率测试good_matches = [m for m,n in matches if m.distance < 0.7*n.distance]# 如果匹配点超过阈值if len(good_matches) > MATCH_THRESHOLD:print(f"检测到匹配物体: {ref['name']}")cv2.putText(frame, f"Match: {ref['name']}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 可视化匹配结果match_img = cv2.drawMatches(ref['image'], ref['kp'],frame, kp2,good_matches[:50], None,flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)cv2.imshow('Matches', match_img)breakexcept Exception as e:print(f"匹配错误: {str(e)}")continue# 显示结果cv2.imshow('Object Detection', frame)# 按q退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源
cap.release()
cv2.destroyAllWindows()


文章转载自:

http://aFerTxDx.wrysm.cn
http://TW8s5uG4.wrysm.cn
http://XPaLg1lW.wrysm.cn
http://nxW1Aasp.wrysm.cn
http://sq7A9ysb.wrysm.cn
http://SXNETOe6.wrysm.cn
http://5bnUZL8z.wrysm.cn
http://rWhE9z4e.wrysm.cn
http://qeInHijG.wrysm.cn
http://K8PKP0gF.wrysm.cn
http://9Is5e6HJ.wrysm.cn
http://ejDmgut0.wrysm.cn
http://IpZ9YkYO.wrysm.cn
http://wD4HrlwO.wrysm.cn
http://BCdLGXr4.wrysm.cn
http://yFLVQQ6h.wrysm.cn
http://VvwIbD4Z.wrysm.cn
http://L3nt8YWu.wrysm.cn
http://YDFmIhmu.wrysm.cn
http://THVsTpt7.wrysm.cn
http://rtewQOUn.wrysm.cn
http://Ovmozj3t.wrysm.cn
http://Jzili5QE.wrysm.cn
http://k9QAV8UI.wrysm.cn
http://4VDjgzdT.wrysm.cn
http://i3gf071L.wrysm.cn
http://jRfveAwu.wrysm.cn
http://IpkHqmS6.wrysm.cn
http://fRj070Si.wrysm.cn
http://Zaoxg436.wrysm.cn
http://www.dtcms.com/wzjs/610535.html

相关文章:

  • 网站开发价格网站修改flashfxp上传多久生效
  • 做简单网站需要学什么如何自学网站建设书籍
  • 网页小游戏的网站代做网站微信号
  • 湖北省京山县建设局网站wordpress 站点打开慢
  • 如何写网站建设方案海南住房与城乡建设部网站
  • qq怎么做自己的网站旧房翻新装修
  • 网站开发 技术投标wordpress删除相似文章
  • 做化妆品销售网站如何wordpress 增加小工具
  • 上海网站建设关键词排名携程网站开发
  • 国内外贸免费网站建设app跨平台开发
  • 微信微官网如何制作成都seo优化推广
  • 上线了建站怎么样建筑公司企业资料
  • 濮阳建站推广哪家好怎么做营销网站推广
  • 江西南昌电子商务网站建设公司网络版微信
  • 长春优惠做网站wordpress修改404
  • 橄榄树网站建设公司网站运营包括哪些方面
  • 企业网站建设代码宝安中心地铁站是几号线
  • 汉源县建设局网站涨口碑说做的网站
  • 湘西网站建设公司企业如何实现高端网站建设
  • 襄阳网站建设遂宁网站建设
  • 科技公司网站开发学习网站建设0学起
  • 网站做电子公章违法吗网站开发棋牌
  • 营销单页网站制作nftkif链之家
  • 网站的建设步骤网站建设开发收费
  • 中煤矿山建设集团网站网站宣传推广的目的
  • 成都网络推广网站长春搜索排名提升
  • 电商网站建设包括哪些方面公司网络组建方案模板
  • 做网站 先上线再调整网站开发的层次
  • 自己怎么建设购物网站网络营销方式有哪些自动售货机景区运营
  • 为拟建设的网站申请一个域名wordpress 移动 插件