如何使用OpenCV读取传统的温度计

时间:2014-06-30 23:25:03

标签: opencv

我是OpenCV的新手,正在寻找使用计算机视觉读取传统温度计的最佳方法的方向。任何指导,一般方法,示例代码?感谢您对这个非常广泛的问题的任何考虑。

所以我想更具体地说,你如何将轮廓缩小到你感兴趣的区域,例如在附图中只有数字的边界框。谢谢你的任何考虑。 [1]:http://eofdreams.com/photo/thermometer/05/“温度计”

import cv2
import numpy as np

img = cv2.imread('thermometer.jpg')

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edges = cv2.Canny(gray,50,150,apertureSize = 3)

contours,hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
keys = [i for i in range(48,58)]
#cnts = sorted(contours, key = cv2.contourArea, reverse = True)[:10]
for cnt in contours:
    #if cv2.contourArea(cnt)>50:
    [x,y,w,h] = cv2.boundingRect(cnt)

    cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
    roi = img[y:y+h,x:x+w]
    roismall = cv2.resize(roi,(10,10))
    cv2.imshow('norm',img)
    key = cv2.waitKey(0)

cv2.imwrite('houghlines3.jpg',edges)

2 个答案:

答案 0 :(得分:0)

是的,这很普遍。我不知道计算机视觉是什么,但我猜它是一些看着温度计的软件。

首先考虑一下这个软件可以理解的内容。我猜它可以接受颜色变化。因此,您应该能够知道颜色何时从红色变为白色(或者当温度计不是红色时的任何颜色)。该程序可能或可能不够智能,无法读取指示温度计温度的数字(我假设这是一个垂直温度计)。如果#s写在玻璃上或弯曲,软件可能无法读取它。但是,如果它是平坦的白色背景上的黑色字母,你可能会很幸运。那么你能找到最接近红色过渡到白色的#吗?如果不是,您可能需要提前校准与不同高度相关的温度。在这种情况下,你基本上会忽略书面的#并将它们硬编码到你的程序中。

祝你好运!

答案 1 :(得分:0)

假设它是静态图像,您可以计算x像素= y度的比例。或者,大约......你可以通过简单的颜色检测来检测水银的高点,将图像转换为hsv,在范围内过滤掉只留下红色,然后找到最小的y值并检查你的比例。 / p>

发现假设一个恒定的线性刻度并且y轴上的每个x像素量等于y度将比试图检测数字并读取它们更容易。但是,为了回答你的问题,因为你的数字是不变的,我建议围绕数字和模板匹配的已知位置进行裁剪,但由于数字不会改变,所以仍然没有意义,所以你可以硬编码位置!

或者,如果它是一个真实世界的场景,要么使用数字温度计并通过模板匹配检测lcd数字,要么将温度计连接到计算机。