本篇博文分享一篇寻找图像中灯光亮点(图像中最亮点)的教程,例如,检测图像中五个灯光的亮点并标记,项目效果如下所示:

第1步:导入并打开原图像,实现代码如下所示:

# import the necessary packages

from imutils import contours

from skimage import measure

import numpy as np

import argparse

import imutils

import cv2

# construct the argument parse and parse the arguments

ap = argparse.ArgumentParser()

ap.add_argument("-i", "--image", required=True,

help="path to the image file")

args = vars(ap.parse_args())

第2步:开始检测图像中最亮的区域,首先需要从磁盘加载图像,然后将其转换为灰度图并进行平滑滤波,以减少高频噪声,实现代码如下所示:

#load the image, convert it to grayscale, and blur it

image = cv2.imread(args["image"])

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

blurred = cv2.GaussianBlur(gray, (11, 11), 0)

导入亮灯图像,过滤后效果如下所示:

第3步:阈值化处理,为了显示模糊图像中最亮的区域,将像素值p >= 200,设置为255(白色),像素值< 200,设置为0(黑色),实现代码如下所示:

# threshold the image to reveal light regions in the

# blurred image

thresh = cv2.threshold(blurred, 200, 255, cv2.THRESH_BINARY)[1]

效果如下所示:

第4步:此时可看到图像中存在噪声(小斑点),所以需要通过腐蚀和膨胀操作来清除,实现代码如下所示:

# perform a series of erosions and dilations to remove

# any small blobs of noise from the thresholded image

thresh = cv2.erode(thresh, None, iterations=2)

thresh = cv2.dilate(thresh, None, iterations=4)

此时“干净”的图像如下所示:

第5步:本项目的关键步骤是对上图中的每个区域进行标记,即使在应用了腐蚀和膨胀后,仍然想要过滤掉剩余的小块儿区域。一个很好的方法是执行连接组件分析,实现代码如下所示:

# perform a connected component analysis on the thresholded

# image, then initialize a mask to store only the "large"

# components

labels = measure.label(thresh, neighbors=8, background=0)

mask = np.zeros(thresh.shape, dtype="uint8")

# loop over the unique components

for label in np.unique(labels):

# if this is the background label, ignore it

if label == 0:

continue

# otherwise, construct the label mask and count the

# number of pixels

labelMask = np.zeros(thresh.shape, dtype="uint8")

labelMask[labels == label] = 255

numPixels = cv2.countNonZero(labelMask)

# if the number of pixels in the component is sufficiently

# large, then add it to our mask of "large blobs"

if numPixels > 300:

mask = cv2.add(mask, labelMask)

上述代码中,第4行使用scikit-image库执行实际的连接组件分析。measure.lable返回的label和阈值图像有相同的大小,唯一的区别就是label存储的为阈值图像每一斑点对应的正整数。

然后在第5行初始化一个掩膜来存储大的斑点。

第7行开始循环遍历每个label中的正整数标签,如果标签为零,则表示正在检测背景并可以安全的忽略它(9,10行)。否则,为当前区域构建一个掩码。

下面提供了一个GIF动画,它可视化地构建了每个标签的labelMask。使用这个动画来帮助你了解如何访问和显示每个单独的组件:

第15行对labelMask中的非零像素进行计数。如果numPixels超过了一个预先定义的阈值(在本例中,总数为300像素),那么认为这个斑点“足够大”,并将其添加到掩膜中。输出掩模如下图所示:

第6步:此时图像中所有小的斑点都被过滤掉了,只有大的斑点被保留了下来。最后一步是在的图像上绘制标记的斑点,实现代码如下所示:

# find the contours in the mask, then sort them from left to

# right

cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,

cv2.CHAIN_APPROX_SIMPLE)

cnts = imutils.grab_contours(cnts)

cnts = contours.sort_contours(cnts)[0]

# loop over the contours

for (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, 0, 255), 3)

cv2.putText(image, "#{}".format(i + 1), (x, y - 15),

cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 255), 2)

# show the output image

cv2.imshow("Image", image)

cv2.waitKey(0)

最后运行程序,可实现灯光亮点的检测和标记,每个灯泡都被独特地标上了圆圈,圆圈围绕着每个单独的明亮区域,效果如下所示:

到此这篇关于Python+OpenCV检测灯光亮点的实现方法的文章就介绍到这了,更多相关OpenCV 检测灯光亮点内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!

python检测屏幕亮点_Python+OpenCV检测灯光亮点的实现方法相关推荐

  1. 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例

    Python Opencv检测并绘制框图 opencv 进行任意形状目标识别,供大家参考,具体内容如下 工作中有一次需要在简单的图上进行目标识别,目标的形状不固定,并且存在一定程度上的噪声影响,但是噪 ...

  2. python检测屏幕图像_Python超级教程,使用Python进行检测面部特征

    原标题:Python超级教程,使用Python进行检测面部特征 今天,我们将学习如何使用图像来检测面部并提取诸如眼睛,鼻子,嘴巴等面部特征.作为捕捉面部的预处理步骤,我们可以做很多令人难以置信的事情, ...

  3. python二维码识别读取_python+opencv检测图片中二维码

    缘起 需要检测发票中二维码的位置,以确定图像该怎么旋转,同时也可以为提取二维码信息创造先觉条件!(万恶的需求!) 失败的尝试--opencv训练大法 不感兴趣的可跳过不看! 解释:原文作者是训练检测舌 ...

  4. python ocr 识别车牌_python+opencv+TESSERT-OCR实现车牌的检测与识别

    python+opencv+TESSERT-OCR实现车牌的检测与识别 开学花了十天时间0基础搞出来的,分享给大家,如果有什么错误希望大家给我指正.python师从小甲鱼,opencv师从贾志刚,B站 ...

  5. 使用YOLOv3(Python - Keras)实时检测屏幕画面进行目标检测教程(以检测GTA5游戏画面为例子)

    毕业设计项目做了一个在游戏GTA5中实现自动驾驶的项目,其中一个功能是汽车的碰撞检测.为了实现这个功能我首先需要能实现识别汽车,对比了使用了SSD和Faster-RCNN,我选择了YOLOv3来实现这 ...

  6. python人脸照片分类_Python OpenCV 人脸识别(一)

    前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...

  7. cvpr2020 人脸检测与识别_Python人脸检测识别实例教程

    前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 ...

  8. python实现屏幕录制_Python实现屏幕录制功能的代码

    前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现 ...

  9. python播放本地视频_python opencv 读取本地视频文件 修改ffmpeg的方法

    Python + opencv 读取视频的三种情况: 情况一:通过摄像头采集视频 情况二:通过本地视频文件获取视频 情况三:通过摄像头录制视频,再读取录制的视频 摄像头采集.本地视频文件的读取.写视频 ...

  10. python做前端可视化_Python数据可视化的四种简易方法

    摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视化是任何数据科学或机器学习项目的一个重要组成部分.人们常常会从探索数据分析(EDA)开始,来深入了解数据, ...

最新文章

  1. 互联网秒杀设计--转载
  2. IE6-7-8 JS关闭窗口不提示的方法
  3. html页面音乐播放器_Embed代码
  4. Java多线程学习三十二:Callable 和 Runnable 的不同?
  5. OPENFILENAME结构的定义
  6. 1.4.1用空间向量研究直线、平面的位置关系教学设计
  7. 测量学1_测量学的基本知识
  8. 计算机 英语简历,2017计算机英文简历范文
  9. opencv绘制图形轮廓并筛选面积操作
  10. 微信小程序用vant自定义tabbar页面并跳转相应页面
  11. 雷电html查看程序编辑程序,雷电模拟器应用操作
  12. 外贸人需要准备的浏览器插件有哪些?
  13. 项目团队的信任问题探讨
  14. john破解系统密码(windows和kali)
  15. 道客某巴插件下载文章,可导出为PDF,照片压缩包
  16. 北京市乡镇界街道shp数据arcgis软件乡镇编码2020年(预览图)
  17. Lenovo 联想OEM_Win7主题
  18. Java三大主流开源工作流引擎分析
  19. 概率论-条件数学期望(复习笔记自用)
  20. 训练食物图片自动分类模型

热门文章

  1. 51单片机300个proteus仿真实例下载
  2. Vulkan_Ray Tracing 08_光照、材质、阴影
  3. c语言中计数器(定时器)程序
  4. JavaScript中使鼠标光标变为图片
  5. 数据结构视频教程 -《[北大张铭 教学版]数据结构与算法(C++)》
  6. 普联(TP-LINK)的无线网卡在Linux下如何使用
  7. mfc 配合directshow
  8. html页面怎么放swf,如何在HTML页面中嵌入SWF文件?
  9. 计算机网络的性能指标
  10. qt自定义控件之简单曲线图表控件