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

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

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 效果

image-20210807171747656

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值