统计一副图片中两个固定像素点之间构成直线的所有像素点

给定一副图片,拥有两个像素坐标,想要获取这两个像素坐标构成的直线上所有的像素坐标。
计算由这两个坐标所构成直线的斜率与偏差,就小学学的一元一次方程算一下就好。

# 输入两个像素点坐标,返回这两个点所确定直线上所有的像素点坐标(返回值代表这条直线的线宽为3个像素),但实质上并不是直线,跟像素点上画园一个道理
# 输入坐标只能是按图片位置上的从左到右,坐标点1(x1, y1)一定要在坐标点2(x2, y2)的左侧,否则无法计算
def calculate_slope(x1, y1, x2, y2):
    if (x2 - x1) == 0:
        print('斜率不存在')
    a = (y2 - y1) / (x2 - x1)
    b = y1 - x1 * ((y2 - y1) / (x2 - x1))
    line_piexl = []
    for i in range(int(x2)):
        if i <= int(x1):
            continue
        elif i > int(x1) & i <= int(x2):
            y = int(a * i + b)
            line_piexl.append([i, y])  # 原直线
            line_piexl.append([i, y - 1])  # 直线向上平移一个像素
            line_piexl.append([i, y + 1])  # 直线向下平移一个像素
    line_piexl = np.array(line_piexl)
    return line_piexl

实际上这个接口返回的所有坐标值,不但包含了两个像素坐标之间的确定线段的所有像素,还包含了该线段向上向下各平移一个像素所确定线段的所有像素坐标,实际上返回的线段的线宽为3个像素,如果不需要线宽的话直接将代码段里面的平移注释掉就好。

你可能感兴趣的:(opencv,python)