Skip to content

图像分割和数字

直方图处理图像

(从网上找的例图)

1.横向切割处理

分割上下边框

​ 把图像分为上下两部分,根据像素点的个数,找到最小的像素行(最小波谷)。 上半部分最小波谷作为下半部分的最小波谷作为底。

71991631555

2、纵向分割

切割字符

每一个字符前面都一定会有波谷出现,波谷出现再上升的时候,作为字符开始的判断标志。

71991636500

四.统计各行各列白色像素个数(为绘制直方图做准备)

# 5、统计各行各列白色像素个数(为了得到直方图横纵坐标)
    ptx, pty = White_Statistic(dilate)
# 二-5、统计白色像素点(分别统计每一行、每一列)
def White_Statistic(image):
    ptx = []  # 每行白色像素个数
    pty = []  # 每列白色像素个数
    height, width = image.shape
    # 逐行遍历
    for i in range(height):
        num = 0
        for j in range(width):
            if(image[i][j]==255):
                num = num+1
        ptx.append(num)

    # 逐列遍历
    for i in range(width):
        num = 0
        for j in range(height):
            if (image[j][i] == 255):
                num = num + 1
        pty.append(num)

    return ptx, pty

五、绘制直方图(横、纵)

有了直方图,可以很直观地看出每一行、每一列的像素分布情况

# 6、绘制直方图(横、纵)
    Draw_Hist(ptx, pty)
# 二-6、绘制直方图
def Draw_Hist(ptx, pty):
    # 依次得到各行、列
    rows, cols = len(ptx), len(pty)
    row = [i for i in range(rows)]
    col = [j for j in range(cols)]
    # 横向直方图
    plt.barh(row, ptx, color='black', height=1)
    #       纵    横
    plt.show()
    # 纵向直方图
    plt.bar(col, pty, color='black', width=1)
    #       横    纵
    plt.show()

六、分割车牌图像

# 二-7、分割车牌图像(根据直方图)
def Cut_Image(ptx, pty, binary, dilate):
    h1 = h2 = 0
    #顶  底
    begin = False        #标记开始/结束
    # 1、依次得到各行、列
    rows, cols = len(ptx), len(pty)
    row = [i for i in range(rows)]
    col = [j for j in range(cols)]

    # 2、横向分割:上下边框
    h1, h2 = Cut_X(ptx, rows)

    # 3、纵向分割:分割字符
    Cut_Y(pty, cols, h1, h2, binary)

1、横向分割:分割上下边框

​ 把图像分为两部分:上半图和下半图,分别找到它们的波谷,就可以确定字符上下边缘,进行分割。

1、下半图波谷

在下半图找波谷,确定字符的下边缘。

# 1、下半图波谷
    min, r = 300, 0
    for i in range(int(rows / 2)):
        if ptx[i] < min:
            min = ptx[i]
            r = i
    h1 = r  # 添加下行(作为顶)

2、上半图波谷

在上半图找波谷,确定字符的上边缘。

# 2、上半图波谷
    min, r = 300, 0
    for i in range(int(rows / 2), rows):
        if ptx[i] < min:
            min = ptx[i]
            r = i
    h2 = r  # 添加上行(作为底)

(pid也学了,但是没实操就不往上写了)