如何在python opencv中使用里程表读数识别闭合的矩形轮廓?

问题描述 投票:0回答:1

我正在尝试使用cv2来识别里程表的读数-我正在尝试提取存在里程表读数的轮廓。我无法准确识别区域。我正在尝试从图像中获取区域/矩形轮廓。该代码用于区域的最大面积。有人能帮我一下吗 ?

以下为代码

import numpy as np
import matplotlib.pyplot as plt 

# assuming you have the result image store in median
median = cv2.imread("odo_2.jpg", 0)
image_gray = median

binary = cv2.bitwise_not(image_gray)
edged = cv2.Canny(binary, 50, 80, 255)

#threshold = cv2.adaptiveThreshold(edged,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)



contours = cv2.findContours(edged, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2]



rect_cnts = []
for cnt in contours:
    peri = cv2.arcLength(cnt, True)
    approx = cv2.approxPolyDP(cnt, 0.04 * peri, True)
    (x, y, w, h) = cv2.boundingRect(cnt)
    ar = w / float(h)
    if (len(approx) == 4) & (ar >= 0.95 and ar <= 1.05) : # shape filtering condition
        pass 
    else :
        rect_cnts.append(cnt)


max_area = 0
football_square = None
for cnt in rect_cnts:
    (x, y, w, h) = cv2.boundingRect(cnt)
    if max_area < w*h:
        max_area = w*h
        football_square = cnt

# Draw the result
image = cv2.cvtColor(image_gray, cv2.COLOR_GRAY2RGB)
cv2.drawContours(image, [football_square], -1, (0, 0,255), 3)
cv2.imshow("Result Preview", image)
#cv2.imshow("Result Preview", edged)
cv2.waitKey(0)

Image Input

python opencv image-processing ocr opencv-contour
1个回答
0
投票

您需要这些值,还是您想用来学习图像处理的东西?如果是第一种情况,我的建议是尝试其他方法。

  1. 您极有可能进入控制LCD的微控制器。也许在电路板上有一些外壳上的插头或一些引脚。也许您可以使用I2C或SPI来获取值。

  2. 如果必须数字化模拟仪器,而又无法侵入控制LCD的芯片,则可以设置一个非常“受控的环境”来读取图像。在您的情况下,这意味着要在里程表周围建立一个暗箱,并仅将LCD的背光用作光源。因此,没有反射等。然后将相机固定在外壳上,并确保获得清晰的图像。在该图像中,使用固定区域抓取LCD并将其输入OCR算法。在这些LCD字体上,有些OCR像一个超级按钮一样起作用。

© www.soinside.com 2019 - 2024. All rights reserved.