2021-07-25

山东大学暑期实训(十一)

记录图像二值化,阈值处理,参考- link

1.全局阈值实例

import cv2 as cv
import numpy as np

# 全局阈值
def threshold_image(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
cv.imshow("初始图像:", gray)

	# 大律法,全局自适应阈值 参数0可改为任意数字但不起作用
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
    print("yuzhi:%s" % ret)
    cv.imshow("OTSU", binary)

    # TRIANGLE法,,全局自适应阈值, 参数0可改为任意数字但不起作用,适用于单个波峰
    ret, binary = cv.threshold(gray, 0, 255,cv.THRESH_BINARY | cv.THRESH_TRIANGLE)
    print("yuzhi:%s" % ret)
    cv.imshow("TRIANGLE", binary)

    # 自定义阈值为150,大于150的是白色 小于的是黑色
    ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)
    print("yuzhi:%s" % ret)
    cv.imshow("define_yuzhi", binary)

    # 自定义阈值为150,大于150的是黑色 小于的是白色
    ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY_INV)
    print("yuzhi:%s" % ret)
    cv.imshow("define_rev", binary)

    # 截断 大于150的是改为150  小于150的保留
    ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TRUNC)
    print("yuzhi:%s" % ret)
    cv.imshow("jieduan1", binary)

    # 截断 小于150的是改为150  大于150的保留
    ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TOZERO)
    print("yuzhi:%s" % ret)
    cv.imshow("jieduan2", binary)


src = cv.imread("initial.jpg")
threshold_image(src)
cv.waitKey(0)
cv.destroyAllWindows()

2.局部阈值实例

  1. 用到的主要函数
adaptiveThreshold(  src, 
                   maxValue, 
                   adaptiveMethod, 
                   thresholdType, 
                   blockSize, 
                   C, 
                   dst=None)
  1. 参数的含义
    第一个src:原始图像
    第二个maxValue:像素值上限
    第三个自适应方法adaptiveMethod:
    — cv2.ADAPTIVE_THRESH_MEAN_C :领域内均值
    —cv2.ADAPTIVE_THRESH_GAUSSIAN_C :领域内像素点加权和,权重为一个高斯窗口
    第四个值的赋值方法:
        只有cv2.THRESH_BINARY 和cv2.THRESH_BINARY_INV
    第五个blockSize
      规定领域大小(一个正方形的领域)
    第六个常数C,
      阈值等于均值或者加权值减去这个常数(为0相当于阈值 就是求得领域内均值或者加权值)
    这种方法理论上得到的效果更好,相当于在动态自适应的调整属于自己像素点的阈值,而不是整幅图像都用一个阈值

  2. 演示代码

import cv2 as cv
import numpy as np

#局部阈值
def local_yuzhi(image):
    gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    cv.imshow('gray',gray)

    # ADAPTIVE_THRESH_MEAN_C 领域内均值
    binary1=cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,25,10)
    cv.imshow('local1',binary1)

    # ADAPTIVE_THRESH_GAUSSIAN_C 领域内像素点加权和,权重为一个高斯窗口
    binary2=cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,25,10)
    cv.imshow('local2',binary2)

src = cv.imread("initial.jpg")
local_yuzhi(src)
cv.waitKey(0)
cv.destroyAllWindows()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值