7.2 Python图像处理之图像分割-单阈值分割

7.2 Python图像处理之图像分割-单阈值分割

文章目录

  • 7.2 Python图像处理之图像分割-单阈值分割
    • 1 算法原理
    • 2 代码
    • 3 效果

1 算法原理

单阈值分割算法原理:

单阈值分割是指将一灰度图,大于阈值的像素白色表示,小于阈值的像素以黑色表示。或者颜色调换过来也可以。该方法找到一个阈值,如果像素低于阈值,就认为是背景,否则认为是目标的一部分。

一般流程:通过判断图像中每一个像素点的特征属性是否满足阈值的要求,来确定图像中的该像素点是属于目标区域还是背景区域,从而将一幅灰度图像转换成二值图像。用数学表达式来表示,则可设原始图像 f(x,y),T 为阈值,分割图像时则满足下式:

image-20210807171545526

0是黑色,255是白色

如果图像中有多个灰度值不同的区域,那么可以选择一系列的阀值以将每个像素分到合适的类别中去。如果只用一个阀值分割称为单阀值方法。

2 代码

运行代码说明

1.要改变代码中的图片地址(地址不能有中文)

最后一行代码:更改put(path)函数中的路径put(r'../image/image1.jpg')

2.注意最后的plt.savefig('1.new.jpg')是保存plt图像,如果不使用可以注释掉

代码依赖包:

matplotlib  3.4.2
numpy  1.20.3
opencv-python  4.1.2.30
# pip安装
pip install matplotlib numpy opencv-python

import cv2
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


def put(path):
    image = cv2.imread(path)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 转为灰度图
    # 方法选择为THRESH_BINARY单阈值,150为阈值,小于阈值使用0表示。0是黑色,255是白色
    ret1, th1 = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)

    plt.subplot(131), plt.imshow(image[:,:,::-1])  # img[:,:,::-1]转换是为了转回RGB格式,这样才可以正常显示彩色图像
    plt.title("原图"),plt.axis('off')
    plt.subplot(132), plt.imshow(gray, "gray")
    plt.title("灰度图"),plt.axis('off')

    plt.subplot(133), plt.imshow(th1, "gray")
    plt.title("单阈值 " + str(ret1)),plt.axis('off')
    # plt.savefig('2.new-img.jpg')
    plt.show()

# 图像处理函数,要传入路径
put(r'../image/img5.jpg')

不同图片要取合适的阈值才好看

3 效果

7.2 Python图像处理之图像分割-单阈值分割_第1张图片

你可能感兴趣的:(python图像处理,opencv,python)