美文网首页Python学习
使用python-opencv在图像中查找最亮点

使用python-opencv在图像中查找最亮点

作者: Kewings | 来源:发表于2021-06-21 19:17 被阅读0次

Python,OpenCV找出图像中的最亮点

这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮点,以及应用单行预处理代码——高斯模糊以改善效果。

1. 原理

查找Python和OpenCV找到图像的最亮点,主要利用 **cv2.minMaxLoc **方法。

使用cv2.minMaxLoc 找到的实际上不是一个区域——它只是整个图像中最亮的单个像素。

**cv2.minMaxLoc找到的是整个图像中单个最亮的像素。 **因此使用极易受到噪音的干扰。在正常情况下不会出现明亮像素的区域(在这种情况下,是视神经中枢以外的区域),单个明亮像素会大大降低检测的结果。

相反,最好检查图像的区域而不是单个像素。因为检查区域时可以让所有区域平均平衡,而不易受到噪音影响。

2. 优化

那么,如何在不显式检查图像的每个区域的情况下模仿这种“区域”效果呢?

  • 查找图像中最亮点的敏感方法是使用cv2.minMaxLoc,称其敏感的原因是该方法极易受噪音干扰(其他区域明亮的像素),可以通过预处理步骤应用 **高斯模糊 **解决。

  • 应用高斯模糊可以对给定半径内的像素进行平均,从而丢弃单个明亮像素。使鲁棒性方法正常工作的一个重要方面是正确设置半径尺寸。

  • 合理的设置高斯模糊半径值非常的重要,正确的设置半径尺寸能很好的保证该方法的鲁棒性;

  • 如果设置半径尺寸太小,将无法找到更大,更亮的图像区域。但是如果设置尺寸过大,那么将检测到太大的区域,而错过了较小的区域,从而导致结果不及预期。

3. 效果图

原始效果 VS 高斯优化后效果图

在这里插入图片描述

有噪音干扰时,原始效果 VS 高斯优化后图

原始效果左图 cv2.minMaxLoc 找到的只是最亮的像素点,所以很容易受高频噪音影响。优化是应用高斯模糊;


在这里插入图片描述

原始效果 VS 高斯优化后图

在这里插入图片描述

4. 源码

# USAGE
# python bright.py --image retina.png --radius 41
# python bright.py --image images/retina-noise.png --radius 41

# 导入必要的包
import numpy as np # 数值处理
import argparse # 命令行参数
import cv2 #绑定openCV

# 构建命令行参数并解析
# --image 照片路径
#  --radius 整数,应用于图像的高斯模糊的半径,必须是技术
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", help = "path to the image file")
ap.add_argument("-r", "--radius", type = int,
                help = "radius of Gaussian blur; must be odd")
args = vars(ap.parse_args())

# 加载图像,复制图像并转换为灰度图
image = cv2.imread(args["image"])
orig = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 查找图像中最亮点的敏感方法是使用cv2.minMaxLoc,称其敏感的原因是该方法极易受噪音干扰,可以通过预处理步骤应用高斯模糊解决。
# 寻找最小、最大像素强度所在的(x,y)
(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray)
# 在最大像素上绘制空心蓝色圆圈
cv2.circle(image, maxLoc, 5, (255, 0, 0), 2)

# 展示该方法的结果
cv2.imshow("Naive", image)

# 使用cv2.minMaxLoc,如果不进行任何预处理,可能会非常容易受到噪音干扰。
# 相反,最好先对图像应用高斯模糊以去除高频噪声。这样,即使像素值非常大(同样由于噪声)也将被其邻居平均。
# 在图像上应用高斯模糊消除高频噪声,然后寻找最亮的像素
# 高斯模糊的半径取决于实际应用和要解决的问题;
gray = cv2.GaussianBlur(gray, (args["radius"], args["radius"]), 0)
(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray)
image = orig.copy()
cv2.circle(image, maxLoc, args["radius"], (255, 0, 0), 2)

# 展示效果显著提升后的方法结果
cv2.imshow("Robust", image)
cv2.waitKey(0)

参考

相关文章

  • 使用python-opencv在图像中查找最亮点

    Python,OpenCV找出图像中的最亮点 这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮...

  • 2020 无人驾驶(7)之车道线检测

    读取图像 使用 python-opencv 读取图像 使用 pygame 显示图像,这是一贯的套路 bird-ey...

  • OpenCV

    链接 Python-OpenCV 用于深度学习,简要介绍Python-OpenCV 中文教程使用opencv读取R...

  • 如何为Python3.5配置opencv?

    一、问题提出 Anaconda python3.5的环境中安装python-opencv失败,在cmd中使用pip...

  • Opencv CUDA应用 图像峰值查找

    图像处理中,经常通过距离变换对粘连物体图像进行分割。而距离变换常常通过峰值查找确定物体图像对质心。查找单通道图像局...

  • python-opencv图像增强

    直方图均衡化 直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶上的分布更加均衡,提高了图像的对比度,达到...

  • [OpenCV_Python]模板匹配

    1.Template Matching(模板匹配) 模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。Ope...

  • iOS 图像处理一(基础)

    使用图像 为了便于操作对象,iOS中定义了图像类:UIImage(UIKit框架中定义的图像类)CGImage(在...

  • Opencv第一个程序:显示图片

    使用python-opencv 使用python调用opencv时,需要先导入库 API函数介绍 读取图片cv2....

  • opencv python接口用法

    python中使用opencv需要导入 import cv2 图像读写 在python中,图像使用numpy数组表...

网友评论

    本文标题:使用python-opencv在图像中查找最亮点

    本文链接:https://www.haomeiwen.com/subject/uvfuyltx.html