OpenCV-Python:如何检测热图像中的热点?
OpenCV-Python: How to detect a hotspot in thermal image?
我正在使用 openCV 和 Python 制作一个计算机视觉应用程序,用于检测热像仪图像中的热点。
图像基本上是一台大型机器,我想获得图像中最热(就温度而言)的部分。
目前想到的:
- 使用颜色量化(和 K 均值)将颜色数量减少到 8。
- 使用某种阈值并获得红色最多的簇(因为通常红色=更多热量)。
现在我已经成功完成了第一部分。我有一个仅包含 8 种颜色的量化图像。
到目前为止,我所做的所有阈值处理都需要我自己设置颜色范围(即使用 cv2.inRange
函数创建桅杆,然后使用 cv2.bitwiseAND
将蒙版应用于图像)。但在这里我希望它是动态的,这样它就能得到最热的部分。即即使红色很少,它也应该让我找到红色最多的区域。
那么有什么方法可以做到这一点?
(另外,"Hotspots",这里我指的是实际热点。即温度最高的点。)
编辑:
正如 Photon 的评论所述,目前我正在计算红色的直方图并使用它来设置阈值。
我希望进一步优化它,所以如果存在更有效的方法,请告诉我。 (这个过程应该很快。我可以在一定程度上牺牲准确性)
为了动态估计阈值,您需要查看数据的分布。为此,您需要计算红色的直方图。
然后,找到一个阈值,使得一定百分比的像素低于它。例如 90%.
我正在使用 openCV 和 Python 制作一个计算机视觉应用程序,用于检测热像仪图像中的热点。
图像基本上是一台大型机器,我想获得图像中最热(就温度而言)的部分。
目前想到的:
- 使用颜色量化(和 K 均值)将颜色数量减少到 8。
- 使用某种阈值并获得红色最多的簇(因为通常红色=更多热量)。
现在我已经成功完成了第一部分。我有一个仅包含 8 种颜色的量化图像。
到目前为止,我所做的所有阈值处理都需要我自己设置颜色范围(即使用 cv2.inRange
函数创建桅杆,然后使用 cv2.bitwiseAND
将蒙版应用于图像)。但在这里我希望它是动态的,这样它就能得到最热的部分。即即使红色很少,它也应该让我找到红色最多的区域。
那么有什么方法可以做到这一点?
(另外,"Hotspots",这里我指的是实际热点。即温度最高的点。)
编辑:
正如 Photon 的评论所述,目前我正在计算红色的直方图并使用它来设置阈值。
我希望进一步优化它,所以如果存在更有效的方法,请告诉我。 (这个过程应该很快。我可以在一定程度上牺牲准确性)
为了动态估计阈值,您需要查看数据的分布。为此,您需要计算红色的直方图。 然后,找到一个阈值,使得一定百分比的像素低于它。例如 90%.