使用 OpenCV 和 Python 识别数字

注意 LCD 的轮廓是如何清晰可见的——这完成了步骤 #1。 我们现在可以继续第 2 步,提取 LCD 本身:

find contours in the edge map, then sort them by their

size in descending order

cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,

cv2.CHAIN_APPROX_SIMPLE)

cnts = imutils.grab_contours(cnts)

cnts = sorted(cnts, key=cv2.contourArea, reverse=True)

displayCnt = None

loop over the contours

for c in cnts:

approximate the contour

peri = cv2.arcLength(c, True)

approx = cv2.approxPolyDP(c, 0.02 * peri, True)

if the contour has four vertices, then we have found

the thermostat display

if len(approx) == 4:

displayCnt = approx

break

为了找到 LCD 区域,我们需要提取边缘图中区域的轮廓(即轮廓)。

然后我们按面积对等高线进行排序,确保将面积较大的等高线放在列表的前面。

给定我们排序的轮廓列表,逐个循环它们并应用轮廓近似。

如果我们的近似轮廓有四个顶点,那么我们假设我们已经找到了恒温器显示。 这是一个合理的假设,因为我们输入图像中最大的矩形区域应该是 LCD 本身。

获得四个顶点后,我们可以通过四点透视变换提取 LCD:

extract the thermostat display, apply a perspective transform

to it

warped = four_point_transform(gray, displayCnt.reshape(4, 2))

output = four_point_transform(image, displayCnt.reshape(4, 2))

应用这种透视变换为我们提供了一个自上而下的 LCD 鸟瞰图:

image-20211108140948248

获得 LCD 的这个视图满足第 2 步——我们现在准备从 LCD 中提取数字:

threshold the warped image, then apply a series of morphological

operations to cleanup the thresholded image

thresh = cv2.threshold(warped, 0, 255,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值