算法的基本原理;将当前像素与领接的下部和右部像素进行比较,如果相似,则将当前的像素设置为白色,否则设置为黑色
如果两个像素点的欧式距离小于某个常数的阈值,则认为相似
import cv2
import numpy as np
fn="xx.jpg"
def get_EuclideanDistance(x,y):
myx=np.array(x)
myy=np.array(y)
return np.sqrt(np.sum(myx-myy)*(myx-myy))
if __name__=='__main__':
print('loading %s...'%fn)
print('working')
myimg1=cv2.imread(fn)
w=myimg1.shape[1]
h=myimg1.shape[0]
sz1=w
sz2=h
#创建空白图像
myimg2=np.zeros((sz2,sz1,3),np.uint8)
#对比产生线条
black=np.array([0,0,0])
white=np.array([255,255,255])
centecolor=np.array([125,125,125])
for y in range(0,sz2-1):
for x in range(0,sz1-1):
mydown=myimg1[y+1,x,:]
myright=myimg1[y,x+1,:]
myhere=myimg1[y,x,:]
lmyhere=myhere
lmyright=myright
lmydowm=mydown
if any(get_EuclideanDistance(lmyhere,lmydown)>16) and any(get_EuclideanDistance(lmyhere,lmyright)>16):
myimg2[y,x,:]=black
elif any(get_EuclideanDistance(lmyhere,lmydown)<=16) and any(get_EclidDistance(lmyhere,lmright)<=16):
myimg2[y,x,:]=white
else:
myimg2[y,x,:]=centercolor
print('.')
cv2.namedWindow('img2')
cv2.imshow('img2',myimg2)
cv2.waitKey()
cv2.destroyAllWindows()
运行出现的Bug:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
修改前
:# if get_EuclideanDistance(lmyhere, lmydown) > 16 and get_EuclideanDistance(lmyhere, lmyright) > 16:
# myimg2[y, x, :] = black
# elif get_EuclideanDistance(lmyhere, lmydown) <= 16 and get_EuclideanDistance(lmyhere, lmyright) <= 16:
# myimg2[y, x, :] = white
# else:()i
# myimg2[y, x, :] = centercolor
修改后:
if any(get_EuclideanDistance(lmyhere, lmydown) > 16) and any(get_EuclideanDistance(lmyhere, lmyright) > 16):
myimg2[y, x, :] = black
elif any(get_EuclideanDistance(lmyhere, lmydown) <= 16) and any(get_EuclideanDistance(lmyhere, lmyright) <= 16):
myimg2[y, x, :] = white
else:
myimg1[y, x, :] = centercolor
测试图片: