文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

OpenCV图像的二值化怎么实现

2023-07-05 04:56

关注

这篇“OpenCV图像的二值化怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“OpenCV图像的二值化怎么实现”文章吧。

图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。

二值化的原理

import cv2img = cv2.imread('img/lena.jpg')# 转为灰度图new_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)height, width = new_img.shape[0:2]# 设置阈值thresh = 60# 遍历每一个像素点for row in range(height):    for col in range(width):        # 获取到灰度值        gray = new_img[row, col]        # 如果灰度值高于阈值 就等于255最大值        if gray > thresh:            new_img[row, col] = 255        # 如果小于阈值,就直接改为0        elif gray < thresh:            new_img[row, col] = 0cv2.imshow('img', new_img)cv2.waitKey()

OpenCV提供的图像二值化API

threshold()方法参数:

二值化的方式:

THRESH_BINARY高于阈值改为255,低于阈值改为0
THRESH_BINARY_INV高于阈值改为0,低于阈值改为255
THRESH_TRUNC截断,高于阈值改为阈值,最大值失效
THRESH_TOZERO高于阈值不改变,低于阈值改为0
THRESH_TOZERO_INV高于阈值该为0,低于阈值不改变
import cv2img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)thresh, new_img = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY)print(thresh)cv2.imshow('img', img)cv2.imshow('NEW_IMG', new_img)cv2.waitKey()

自适应阈值

使用一个全局值作为阈值。但是在所有情况下这可能都不太好。

如果图像在不同区域具有不同的照明条件。

在这种情况下,自适应阈值阈值可以帮助。这里,算法基于其周围的小区域确定像素的阈值。

因此,我们为同一图像的不同区域获得不同的阈值,这为具有不同照明的图像提供了更好的结果。

adaptlive()方法参数:

cv2.ADAPTIVE_THRESH_MEAN_C:该阈值是该附近区域减去恒定的平均&Ccedil;。

cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值减去常数C的高斯加权和。

import cv2img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)thresh_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5)cv2.imshow('thresh_img', thresh_img)cv2.waitKey()

大津算法(最大类间方差法)

图像分割中阈值选取的最佳算法

threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
import cv2img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)# 使用255的阈值进行二值化ret, thresh_img = cv2.threshold(img, 255, 255, cv2.THRESH_BINARY)cv2.imshow('normal', thresh_img)# 使用高斯滤波模糊图像  参数1: 图片矩阵  参数2:卷积核 参数3: 越大越模糊gaussian_img = cv2.GaussianBlur(img, (5, 5), 0)cv2.imshow('gaussian_img', gaussian_img)# 使用大津算法0阈值二值化经过高斯滤波模糊后的图像ret, thresh_img = cv2.threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)cv2.imshow('otsu', thresh_img)cv2.imshow('img', img)cv2.waitKey()

以上就是关于“OpenCV图像的二值化怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯