首页 > 编程语言 >OpenCV-Python实战(7)——阈值处理

OpenCV-Python实战(7)——阈值处理

时间:2024-12-27 15:58:37浏览次数:10  
标签:BINARY 阈值 src Python car cv2 OpenCV THRESH

一、cv2.threshold()

res, dst = cv2.threshold(src=*,thresh=*,maxval=*,type=*) 

 res:函数返回的阈值。

dst:阈值处理后的函数。

src:要处理的图像。

thresh:阈值。

maxval:设定像素最大值。

type:阈值函数处理方法,常见方法如下表所示:

方法解释
THRESH_BINARY0大于阈值取最大值,其他值取0
THRESH_BINARY_INV1大于阈值取0,其他为最大值
THRESH_TRUNC2大于阈值取阈值,其他值不变
THRESH_TOZERO3大于阈值不变,其他值取0
THRESH_TOZERO_INV4大于阈值取0,其他值不变
THRESH_OTSU8使用算法自动计算阈值
THRESH_TRIANGLE16使用三角形算法自动计算阈值

1.1 自定义阈值 

import cv2
import numpy as np

car = cv2.imread('car.png',cv2.IMREAD_GRAYSCALE )
car = car[::2,::2]

res1, dst1 = cv2.threshold(src=car,thresh=100,maxval=255,type=cv2.THRESH_BINARY)
res2, dst2 = cv2.threshold(src=car,thresh=100,maxval=255,type=cv2.THRESH_BINARY_INV)
res3, dst3 = cv2.threshold(src=car,thresh=100,maxval=255,type=cv2.THRESH_TRUNC)
res4, dst4 = cv2.threshold(src=car,thresh=100,maxval=255,type=cv2.THRESH_TOZERO)
res5, dst5 = cv2.threshold(src=car,thresh=100,maxval=255,type=cv2.THRESH_TOZERO_INV)

cv2.imshow('car',car)
cv2.imshow('THRESH_BINARY',dst1)
cv2.imshow('THRESH_BINARY_INV',dst2)
cv2.imshow('THRESH_TRUNC',dst3)
cv2.imshow('THRESH_TOZERO',dst4)
cv2.imshow('THRESH_TOZERO_INV',dst5)

cv2.waitKey(0)
cv2.destroyAllWindows()

 1.2  自动阈值

import cv2

car = cv2.imread('car.png',cv2.IMREAD_GRAYSCALE )
car = car[::2,::2]

res1, dst1 = cv2.threshold(src=car,thresh=100,maxval=255,type=cv2.THRESH_BINARY)
res2, dst2 = cv2.threshold(src=car,thresh=100,maxval=255,type=(cv2.THRESH_BINARY+cv2.THRESH_OTSU))
res3, dst3 = cv2.threshold(src=car,thresh=100,maxval=255,type=(cv2.THRESH_BINARY+cv2.THRESH_TRIANGLE))

cv2.imshow('car',car)
cv2.imshow('THRESH_BINARY',dst1)
cv2.imshow('THRESH_OTSU',dst2)
cv2.imshow('THRESH_TRIANGLE',dst3)

print("THRESH_OTSU方法的计算阈值:",res2)
print("THRESH_TRIANGLE方法的计算阈值:",res3)
cv2.waitKey(0)
cv2.destroyAllWindows()

 从结果可以看出THRESH_OTSU方法的计算阈值比较可靠,能够很好的显示物体的轮廓。

 二、cv2.adaptiveThreshold()

res, dst = cv2.adaptiveThreshold(src=*,maxval=*,adaptiveMethod=*,thresholdType=*,blockSize=,C=*)

res:函数返回的阈值。

maxval:设定像素最大值。

adaptiveMethod:

算术平均法cv2.ADAPTIVE_THRESH_MEAN_C、将周围区域的平均值当作阈值,再减去参数C
高斯加权和法cv2.ADAPTIVE_THRESH_GAUSSIAN_C利用高斯函数方法对中心点和周围区域进行加权计算当作阈值,在减去参数C

thresholdType:阈值处理方法。必须为:THRESH_BINARY 或 THRESH_BINARY_INV

blockSize:阈值计算核,3*3或5*5或7*7等。

C:常数。

import cv2

car = cv2.imread('car.png',cv2.IMREAD_GRAYSCALE )
car = car[::2,::2]

res1, dst1 = cv2.threshold(src=car,thresh=100,maxval=255,type=cv2.THRESH_BINARY)
dst2 = cv2.adaptiveThreshold(src=car,maxValue=255,adaptiveMethod=cv2.ADAPTIVE_THRESH_MEAN_C,thresholdType=cv2.THRESH_BINARY,blockSize=7,C=0)
dst3 = cv2.adaptiveThreshold(src=car,maxValue=255,adaptiveMethod=cv2.ADAPTIVE_THRESH_GAUSSIAN_C,thresholdType=cv2.THRESH_BINARY,blockSize=7,C=0)

cv2.imshow('car',car)
cv2.imshow('THRESH_BINARY',dst1)
cv2.imshow('ADAPTIVE_THRESH_MEAN_C',dst2)
cv2.imshow('ADAPTIVE_THRESH_GAUSSIAN_C',dst3)

cv2.waitKey(0)
cv2.destroyAllWindows()

可以调整 blockSize=?进行调试,blockSize越小,绘制的二值图像轮廓越细节。

标签:BINARY,阈值,src,Python,car,cv2,OpenCV,THRESH
From: https://blog.csdn.net/2201_75538245/article/details/144769220

相关文章

  • 【java毕设 python毕设 大数据毕设】基于springboot的学生宿舍管理系统的设计与实现
    ✍✍计算机毕设编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • Python数据结构之双向循环链表
    1、循环双向链表特点通过当前结点直接获取上一结点通过头结点的上一结点直接可以去找到尾结点可以进行反向循环链表,即反转链表2、头结点链表头:在数据结构中,链表是一种常见的存储结构。链表的每个节点包含数据和指向下一个节点的指针。链表头是链表的第一个节点,它在链表的......
  • 基于Python的医疗大模型落地:面向数据库编程驱动医疗大模型轻量化变革
    一、引言1.1研究背景与意义随着医疗大模型在医疗领域的广泛应用,其在辅助医疗决策、疾病诊断、药物研发等方面发挥着重要作用。然而,医疗大模型在落地过程中面临诸多困境,如数据隐私保护、模型复杂导致成本高昂以及基层医疗适配性差等问题。与此同时,PostgreSQL凭借其强大的数......
  • Python批量统计栅格数据最大值、最小值、平均值,并将结果存在excel中
    @[Python批量统计栅格数据最大值、最小值、平均值,并将结果存在excel中importosimportrasterioimportnumpyasnpimportpandasaspddefcollect_tif_stats(root_dir,process_all_bands=False):stats_list=[]#遍历文件夹和子文件夹forsubdir,......
  • Python包管理不再头疼:uv工具快速上手
    Python包管理生态中存在多种工具,如pip、pip-tools、poetry、conda等,各自具备一定功能。而今天介绍的uv是Astral公司推出的一款基于Rust编写的Python包管理工具,旨在成为“Python的Cargo”。它提供了快速、可靠且易用的包管理体验,在性能、兼容性和功能上都有出色表现......
  • 啤酒行业竞争分析:Python爬虫技术揭示不为人知的秘密!
    在数字化时代,啤酒行业的竞争形势正经历着前所未有的变化。作为一名数据爱好者,我决定用Python爬虫技术来捕捉这一动态,并进行深入的数据分析。以下是我如何通过Python爬虫获取啤酒行业竞争形势数据,并将其保存到桌面进行分析的全过程。探索啤酒行业竞争形势:Python爬虫与数据分......
  • Python基础——类和对象
    目录1.定义类2.创建对象3.类和对象的示例4.类的方法4.1实例方法4.2类方法4.3静态方法5.类的继承6.封装与多态在Python中,类(Class)和对象(Object)是面向对象编程的核心概念。通过类和对象,可以组织和管理代码,使得代码更加模块化、可重用和易于维护。下面详细介......
  • Python系列之例题100题(21-25题)
    Hello!友友们,废话不多说开始上干货!!!21:斐波那契数列:又称兔子数列,指的是这样一个数列:1,1,2,3,5,8,13,21,34,……编写程序找出第n个项。(结果为8)#递归deffib(n)ifn==1orn==2:return1else:returnfib(n-1)+fib(n-2)print(fib(6))#非递归n......
  • Linux磁盘阈值及内存阈值检测脚本
    #!/bin/bash#设置阈值,例如磁盘使用率超过80%,内存使用率超过90%DISK_THRESHOLD=90MEMORY_THRESHOLD=99#获取磁盘使用百分比(这里以根目录为例)DISK_USAGE=$(df/--output=pcent|grep-o'[0-9]\+')#获取内存使用百分比MEMORY_USAGE=$(free|grepMem|awk'{print......
  • python+panddleocr+文本检测自定义数据集训练及测试
    python+panddleocr+文本检测自定义数据集训练及测试引言1相关链接2预训练模型及配置文件3文本检测的数据集格式文本检测训练测试1,标签转换(1)标签转换脚本(2)转换后的数据集结果2,训练(1)训练脚本(2)训练结果3,导出(1)导出脚本(2)导出结果4,测试......