matlab中定位图像中最亮的区域,Python+Opencv寻图像中
最亮的区域
Python+Opencv寻图像中最亮的区域
python入门教程网盘Python+Opencv寻图像中最亮的区域
⽬录⼀、场景需求解读
⼆、算法原理简介
三、算法代码实现
四、代码运⾏步骤
五、算法效果展⽰和分析
六、思维扩展
参考资料
matlab怎么调用自己编的函数
注意事项
在有些现实场景中,我们需要去使⽤算法⾃动的寻到图⽚中的最亮的区域,这个区域是我们感兴趣的⽬标所在的位置,⽐较典型的是⼀个应⽤是视⽹膜图像,图像中视⽹膜所在的位置⽐较亮,⽽其它地⽅⽐较暗,我们更加关注视⽹膜所在的区域,因⽽需要使⽤算法⾃动的寻到这个区域,然后针对这个区域进⾏处理和分析。下图展⽰了⼀个样例图⽚。
要检测出图像中最亮的区域,我们可以直接使⽤opencv中⾃带的函数(minVal, maxVal, minLoc, maxLoc) =
migrate例句cv2.minMaxLoc(gray),该函数是⽤来获取图像中的最⼤值和最⼩值 所在的位置,⽽图像中的最⼤值其实就是最亮的像素点,图像中的最⼩值其实就是最暗的像素点,该函数的输⼊参数是⼀张灰度图像,该函数会返回最⼤值、最⼩值、最⼤值所在位置和最⼩值所在位置等,我们可以根据获得的位置信息绘制结果。
# coding=utf-8
# 导⼊python包
import numpy as np
import argparse
import cv2
# 构建并解析参数
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", help = "path to the image file")汇编语言王爽实验4
ap.add_argument("-r", "--radius", type = int, help = "radius of Gaussian blur; must be odd")
args = vars(ap.parse_args())matlab数据处理教程
# 读取图⽚并将其转化为灰度图⽚
image = cv2.imread(args["image"])
orig = py()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 利⽤cv2.minMaxLoc寻到图像中最亮和最暗的点
(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray)
# 在图像中绘制结果
cv2.circle(image, maxLoc, 5, (255, 0, 0), 2)
splitter是什么东西# 应⽤⾼斯模糊进⾏预处理
gray = cv2.GaussianBlur(gray, (args["radius"], args["radius"]), 0)
(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray)
image1 = py()
cv2.circle(image1, maxLoc, args["radius"], (255, 0, 0), 2)
# 显⽰结果
result = np.hstack([orig, image, image1])
cv2.imwrite("region5.png", result)
cv2.imshow("Robust", result)
cv2.waitKey(0)
步骤1-打开⼀个cmd界⾯;
步骤2-cd /d xxx 切换到代码所在的绝对路径中,xxx表⽰代码所在的具体路径;
步骤3-python find_region.py -i img5.png -r 59 运⾏代码,-i表⽰设置测试图⽚,-r表⽰设置显⽰的半径⼤⼩。
上图展⽰了该算法的运⾏结果。每⼀⾏表⽰⼀个测试案例,第1列表⽰的是输⼊的原图,第2列表⽰的是原始的输出结果,即直接使⽤
cv2.minMaxLoc函数的结果,这个函数可以输出图像中最亮的点和最暗的点所在的具体位置和对应的值,但是它容易受到噪声的⼲扰,第2⾏第2列输出了错误的结果;第3列表⽰的是预处理之后的结果,即⾸先使⽤⾼斯函数进⾏去噪处理,然后再使⽤cv2.minMaxLoc函数的效果,通过观察图中的结果,我们可以发现改进后的效果更佳明显,准确的检测到了图像中最亮的区域,满⾜了我们的要求。需要注意的是,⽤户需要根据输⼊图⽚的⼤⼩去调节–radius参数的值,该值必须为奇数。
对于本⽂的这个任务⽽⾔,其实还可以⽤其它的思路很好的实现,⼀个可⾏的思路是使⽤图像⼆值化+寻图像中的最⼤轮廓来实现,主要的原始是因为眼球和其它区域之间具有较⼤的颜⾊差异,可以通过设置⼀个合适的阈值来讲它们区分开来,然后在这个⼆值图像中寻最⼤的轮廓就可以到我们的⽬标,寻最⼤轮廓的⽬的是因为图像中会含有⼀些其它的噪声,⽐如其它区域中⽐较⼩的亮区域,具体的代码实现就留给聪明的你来实现啦。
[1] 参考链接
[1] 该博客是本⼈原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:[email protected]),我会在第⼀时间回复⼤家,谢谢⼤家的关注.
[2] 由于个⼈能⼒有限,该博客可能存在很多的问题,希望⼤家能够提出改进意见。
[3] 如果您在阅读本博客时遇到不理解的地⽅,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[4] 本⽂测试的图⽚可以通过该链接进⾏下载。⽹盘链接-提取码:lvah。
[5] 本⼈业余时间承接各种本科毕设设计和各种⼩项⽬,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊
Python+Opencv寻图像中最亮的区域相关教程
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论