python中除以零的处理_使用Python和OpenCV除以零错误

I am using this code to remove the lines from the following image:

I don't know the reason, but it gives me as output ZeroDivisionError: division by zero error on line 34 - x0, x1, y0, y1 = (0, im_wb.shape[1], sum(y0_list)/len(y0_list), sum(y1_list)/len(y1_list)).

What's the reason ? How can I fix it ?

import cv2

import numpy as np

img = cv2.imread('lines.png',0)

# Applies threshold and inverts the image colors

(thresh, im_bw) = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

im_wb = (255-im_bw)

# Line parameters

minLineLength = 100

maxLineGap = 10

color = 255

size = 1

# Substracts the black line

lines = cv2.HoughLinesP(im_wb,1,np.pi/180,minLineLength,maxLineGap)[0]

# Makes a list of the y's located at position x0 and x1

y0_list = []

y1_list = []

for x0,y0,x1,y1 in lines:

if x0 == 0:

y0_list.append(y0)

if x1 == im_wb.shape[1]:

y1_list.append(y1)

# Calculates line thickness and its half

thick = max(len(y0_list), len(y1_list))

hthick = int(thick/2)

# Initial and ending point of the full line

x0, x1, y0, y1 = (0, im_wb.shape[1], sum(y0_list)/len(y0_list), sum(y1_list)/len(y1_list))

# Iterates all x's and prints makes a vertical line with the desired thickness

# when the point is surrounded by white pixels

for x in range(x1):

y = int(x*(y1-y0)/x1) + y0

if im_wb[y+hthick+1, x] == 0 and im_wb[y-hthick-1, x] == 0:

cv2.line(img,(x,y-hthick),(x,y+hthick),colour,size)

cv2.imshow('clean', img)

cv2.waitKey(0)

解决方案

Well the cause of the error is that the length is 0 of either y0_list or y1_list (or both). Since you initialize them in this for loop :

for x0,y0,x1,y1 in lines:

if x0 == 0:

y0_list.append(y0)

if x1 == im_wb.shape[1]:

y1_list.append(y1)

You can narrow your error down to either lines not having the expected values or your 2 if statements being faulty. I believe the problem is caused by the latter but the easiest check you can do is print out lines and check manually if your if statements would be triggered.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值