python+opencv 图像二值化

部署运行你感兴趣的模型镜像

图像二值化的方法:1、全局阈值     2、局部阈值

OpenCV中图像二值化方法:1、OTSU     2、Triangle      3、自动与手动     4、自适应阈值

import cv2 as cv
import numpy as np


# 根据选定的方法自动寻找阈值
def threshold_demo(image):
    # 灰度图像
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # 二值图像
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)
    print('threshold value %s' % ret)
    cv.imshow('binary', binary)


# 局部阈值
def local_threshold(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # blockSize 必须是奇数,下面设为25, 比均值大10(自己设置)就设置为黑色或者白色,在10之内的设置为另一个颜色
    dst = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)
    cv.imshow('binary', dst)


# 自适应阈值
def custom_threshold(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    h, w = gray.shape[:2]
    m = np.reshape(gray, [1, w*h])
    # 均值
    mean = m.sum() / (w*h)
    print('mean:', mean)
    ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)
    cv.imshow('binary', binary)


# 手动设定阈值
def threshold_demo_1(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_TRUNC)
    print('threshold value %s' % ret)
    cv.imshow('binary', binary)


src = cv.imread('C:/Users/Y/Pictures/Saved Pictures/demo.png')
cv.namedWindow('input image', cv.WINDOW_AUTOSIZE)
cv.imshow('input image', src)
custom_threshold(src)
cv.waitKey(0)
cv.destroyAllWindows()

                        原图像                                                                                   threshold_demo二值化后的图像

local_threshold二值化后的图像                                                        custom_threshold二值化后的图像

custom_threshold中的均值

threshold_demo_1二值化后的图像

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Python OpenCV 图像二值化处理方法及类型 #### 全局阈值二值化 全局阈值二值化是一种简单而常用的技术。通过设定一个固定的阈值,将图像中的像素分为两类:高于阈值的设为白色(255),低于或等于阈值的设为黑色(0)。这种方法适用于背景和前景对比明显的图像。 ```python import cv2 # 读取灰度图像 img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # 应用全局阈值二值化 ret, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) ``` 此代码片段展示了如何应用全局阈值来创建二值图像[^1]。 #### 自适应阈值二值化 自适应阈值二值化考虑了局部区域内的亮度变化,而不是整个图像采用统一的标准。这对于光照不均匀的情况特别有效。OpenCV提供了两种常见的算法:“平均法”和“高斯加权”。 ```python adaptive_thresh_mean = cv2.adaptiveThreshold( img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2) adaptive_thresh_gaussian = cv2.adaptiveThreshold( img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) ``` 上述例子分别实现了均值和平滑后的高斯权重计算方式下的自适应阈值处理[^2]。 #### Otsu's Binarization 方法 当无法预先知道合适的固定阈值时,可以利用Otsu’s自动寻找最佳分割点的方法来进行优化。该技术能够根据数据分布特性找到最合理的分界线,从而提高准确性。 ```python ret2, otsu_thresholded_img = cv2.threshold( img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) ``` 这段程序调用了`cv2.threshold()`函数并指定了额外参数`THRESH_OTSU`以启用这一功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值