laser point detection

2023-11-05 01:18
文章标签 detection point laser

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

laser point detection

本文主要目的是通过检测激光点,通过相机光轴、激光束和激光点之前形成的几何关系求解距离信息,达到单目相机测距的功能。
  • 检测结果
    检测结果

  • 参考

    1.DIY专区一、 用摄像头及激光来测距(opencv)
    2.opencv激光点追踪代码
    3.opencv-python中文教程:颜色空间转换
    4.github.com/Ankur/OpenCV-Laser-Tracker
    5.OpenCV-Laser-Tracker
    6. Laser pointer detect and track
    7.stack overflow:laser curved line detection using opencv and python
    8.Python视觉处理(四)HSV处理
    9.用python3 opencv3 实现相机学生证的实时跟踪
    10.Opencv中SimpleBlobDetector的使用(斑点检测)
    11.【转】使用OpenCV进行斑点检测Blob Detection Using OpenCV ( Python, C++ )
    12.重点参考该内容:pyimagesearch.com:Detecting multiple bright spots in an image with Python and OpenCV
    13.OpenCV 形状分析(上):计算轮廓中心
    14.三角测距法的原理

  • code

#!/usr/bin/python3
# import the necessary packages
from imutils import contours
from skimage import measure
import numpy as np
#import argparse
import imutils
import cv2
import mathCAM=2
cap = cv2.VideoCapture(CAM)def nothing(x):pass#添加参数控制
cv2.namedWindow("params")
cv2.createTrackbar("manual","params",0,1,nothing)
cv2.createTrackbar("pixels_num","params",0,2000,nothing)ret,frame=cap.read()
W=frame.shape[0]
H=frame.shape[1]while True:ret,frame=cap.read()image=frame# load the image, convert it to grayscale, and blur itgray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)blurred = cv2.GaussianBlur(gray, (11, 11), 0)# threshold the image to reveal light regions in the# blurred imagethresh = cv2.threshold(blurred, 200, 255, cv2.THRESH_BINARY)[1]# perform a series of erosions and dilations to remove# any small blobs of noise from the thresholded imagethresh = cv2.erode(thresh, None, iterations=2)thresh = cv2.dilate(thresh, None, iterations=4)# perform a connected component analysis on the thresholded# image, then initialize a mask to store only the "large"# componentslabels = measure.label(thresh, neighbors=8, background=0)mask = np.zeros(thresh.shape, dtype="uint8")MANUAL=cv2.getTrackbarPos("manual","params")PIXEL_THRESH=cv2.getTrackbarPos("pixels_num","params") if MANUAL==1 else 500# loop over the unique componentsfor label in np.unique(labels):# if this is the background label, ignore itif label == 0:continue# otherwise, construct the label mask and count the# number of pixelslabelMask = np.zeros(thresh.shape, dtype="uint8")labelMask[labels == label] = 255numPixels = cv2.countNonZero(labelMask)# 通过斑点的像素面积确定激光斑点 #if numPixels > 300:#print(numPixels) #debugcv2.putText(image, "pixel_num:{}".format(numPixels), (10, 10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)if numPixels <PIXEL_THRESH:  #亮斑过滤,可调参数149 ,500,1269mask = cv2.add(mask, labelMask)# find the contours in the mask, then sort them from left to# rightcnts= cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)#不同返回参数,不是一个算法!!? 打包成一个对象了#im,cnts,hierarchy = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)if len(cnts) <2:print("未检测到轮廓")continuecnts = cnts[0] if imutils.is_cv2() else cnts[1]  #用以区分OpenCV2.4和OpenCV3  #cnts = contours.sort_contours(cnts)[0]cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5] #保留最大轮廓  # loop over the contoursfor (i, c) in enumerate(cnts):# draw the bright spot on the image(x, y, w, h) = cv2.boundingRect(c)((cX, cY), radius) = cv2.minEnclosingCircle(c)cv2.circle(image, (int(cX), int(cY)), int(radius),(0, 255, 0), 3)cv2.circle(image, (int(H/2), int(W/2)), int(3),(0, 0, 255), -1)cv2.putText(image, "#{} at ({},{})".format(i + 1,x,y), (x, y - 15),cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)X=math.pow(abs(W/2-y),2) #|方向X=X+math.pow(abs(H/2-x),2) #-方向X1=abs(H/2-x)X2=abs(W/2-y)print("X_:",X1)print("X|:",X2)#X=math.sqrt(X)X=X1if X==0:continueprint("X:",X)D=797.292/X*3.5  #camL f=797.29#D=832.52/X*3.5   #camR f=832.52print("D:",D,"cm")breakcv2.imshow("mask",mask)cv2.imshow("image",image)k=cv2.waitKey(40)&0xffif k==27:break
cap.release()
cv2.destoryAllWindows()

这篇关于laser point detection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

MACS bdgdiff: Differential peak detection based on paired four bedGraph files.

参考原文地址:[http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html](http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html) 文章目录 一、MACS bdgdiff 简介DESCRIPTION 二、用法

Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测

又是一篇在自编码器框架中研究使用记忆模块的论文,可以看做19年的iccv的论文的衍生,在我的博客中对19年iccv这篇论文也做了简单介绍。韩国人写的,应该是吧,这名字听起来就像。 摘要abstract 我们解决异常检测的问题,即检测视频序列中的异常事件。基于卷积神经网络的异常检测方法通常利用代理任务(如重建输入视频帧)来学习描述正常情况的模型,而在训练时看不到异常样本,并在测试时使用重建误

REMEMBERING HISTORY WITH CONVOLUTIONAL LSTM FOR ANOMALY DETECTION——利用卷积LSTM记忆历史进行异常检测

上海科技大学的文章,上海科技大学有个组一直在做这方面的工作,好文章挺多的还有数据集。 ABSTRACT 本文解决了视频中的异常检测问题,由于异常是无界的,所以异常检测是一项极具挑战性的任务。我们通过利用卷积神经网络(CNN或ConvNet)对每一帧进行外观编码,并利用卷积长期记忆(ConvLSTM)来记忆与运动信息相对应的所有过去的帧来完成这项任务。然后将ConvNet和ConvLSTM与

COD论文笔记 ECCV2024 Just a Hint: Point-Supervised Camouflaged Object Detection

这篇论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点: 1. 动机 伪装物体检测(Camouflaged Object Detection, COD)旨在检测隐藏在环境中的伪装物体,这是一个具有挑战性的任务。由于伪装物体与背景的细微差别和模糊的边界,手动标注像素级的物体非常耗时,例如每张图片可能需要 60 分钟来标注。因此,作者希望通过减少标注负担,提出了一种仅依赖“点标注”的弱

COD论文笔记 Adaptive Guidance Learning for Camouflaged Object Detection

论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点如下: 动机: 论文的核心动机是解决伪装目标检测(COD)中的挑战性任务。伪装目标检测旨在识别和分割那些在视觉上与周围环境高度相似的目标,这对于计算机视觉来说是非常困难的任务。尽管深度学习方法在该领域取得了一定进展,但现有方法仍面临有效分离目标和背景的难题,尤其是在伪装目标与背景特征高度相似的情况下。 现有方法的不足之处: 过于

Detection简记3-Region Proposal by Guided Anchoring

创新点 1.新的anchor 分布策略:Guided Anchoring 2.feature adaption module,根据潜在的anchor精调特征 总结 Guided Anchoring:流程如图所示 特征图F1接两个分支:位置预测分支产生物体可能存在的位置的概率图,形状预测分支预测物体的形状,独立于位置。根据两个分支的输出,得到anchor。 位置预测分支: 1X1的卷积+si

Detection简记2-DAFE-FD: Density Aware Feature Enrichment for Face Detection

创新点 1.使用密度估计模型增强检测中的特征图 总结 整个流程还是很清晰的。 conv1-3的特征图经过密度估计模块由检测器D1进行检测。 D2-4分别是四个检测器。 FFM是特征融合模块,将不同层不同大小的特征融合。 FFM网络结构如下: 首先使用1X1的卷积减少两组特征的厚度到128,然后使用双线性插值统一两组特征图的尺寸,然后相加。类似于cvpr2017的SSH。 多尺度检测器的网

DS简记1-Real-time Joint Object Detection and Semantic Segmentation Network for Automated Driving

创新点 1.更小的网络,更多的类别,更复杂的实验 2. 一体化 总结 终于看到一篇检测跟踪一体化的文章 网络结构如下: ResNet10是共享的Encoder,yolov2 是检测的Deconder,FCN8 是分割的Deconder。 其实很简单,论文作者也指出:Our work is closest to the recent MultiNet. We differ by focus

POL(Point-of-Load)负载点电源

负载点(POL)电源在靠近负载处单独放置电源调节器(线性稳压器或DC-DC),解决了高性能半导体器件,例如:微控制器、ASIC等,所面临的高峰值电流、低噪声裕量等设计挑战。 一般我们会把负载点电源尽量靠近负载放置, 这么做可以最大限度地确保供电效率和准确性。 图 1 常见POL电源的拓扑结构 Typical设计POL设计