2014-06-30 96 views
-1

我是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) 
+0

[tesseract](https://code.google.com/p/python-tesseract/) – Fabricator

+0

您最好縮小這個範圍,否則它會因太寬泛而關閉。想要閱讀的溫度計圖像會有所幫助,以及您嘗試過的一些想法以及爲什麼它們不起作用。 – Bull

+0

多少手動工作是好的?如果視圖是靜態的,用戶可能會標記溫度計的上限和下限,並將溫度值設置爲這些邊界?在這種情況下,閱讀溫度計的任務就會減少到讀取「紅線」的位置,這可以通過HSV顏色分類來完成。 – Micka

回答

0

是的,這是非常普遍。我不知道計算機視覺是什麼,但我猜測它是一些看着溫度計的軟件。

所以首先想想這個軟件能理解什麼。我會猜測它可以在顏色變化上起作用。所以你應該能夠知道顏色何時從紅色變爲白色(或者當溫度計不是紅色時)。該程序可能會或可能不夠聰明,無法讀取指示溫度計溫度的數字(我假設這是一個垂直溫度計)。如果#是寫在玻璃或彎曲的,軟件可能無法讀取它。但是,如果它是平坦的白色背景上的黑色字母,你可能會很幸運。你能找到最接近#的地方,紅色轉變爲白色嗎?如果不是,您可能需要提前校準與變化高度相關的溫度。在這種情況下,你基本上會忽略寫入的#並將它們硬編碼到你的程序中。

祝你好運!

0

假設它是靜態圖像,您可以計算x pixels = y度的比例。或者,大概...您可以通過簡單的顏色檢測來檢測汞的高點,將圖像轉換爲hsv,在範圍內過濾只留下紅色,然後找到最小的y值並檢查您的比例。

發現假設假設一個恆定的線性比例尺和y軸上的每個x像素數量等於y度比試圖檢測數字並讀取它們更容易。雖然,爲了回答你的問題,因爲你的數字是恆定的,我建議剪切數字和模板匹配的已知位置,但這仍然沒有意義,因爲數字不會改變,所以你可以對位置進行硬編碼!

或者,如果是現實世界的場景,可以使用數字溫度計並通過模板匹配檢測液晶數字,或將溫度計連接到計算機。