R329-opencv阈值分割算法——自适应阈值

2023-11-05

R329-opencv阈值分割算法——自适应阈值

在不均匀照明或者灰度值分布不均的情况下,如果使用全局阈值分割,那么得到的分割效果往往会很不理想,这个时候就要你用到自适应阈值算法了。OpenCV提供了自适应的二值化函数,通过该函数可以对图像的不同区域动态计算并应用不同的阈值进行二值化。官方文档:https://docs.opencv.org/3.4.2/d7/d1b/group__imgproc__misc.html#ga72b913f352e4a1b1b397736707afcde3

dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

参数说明:

  • src:要处理的图像数据,为单通道灰度图像;
  • maxValue:double类型,二值化后的最大值;
  • adaptiveMethod:动态计算阈值的方法,有以下两种:
    • cv2.ADAPTIVE_THRESH_MEAN_C:计算区域内的平均值减去C;
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:计算区域内的高斯均值减去C;
  • thresholdType:二值化类型flags,在该函数中仅能使用cv2.THRESH_BINARY和cv2.THRESH_BINARY_INV两种
  • blockSize:动态化计算阈值时所使用的区域的大小,类似卷积时的卷积核大小,需要为奇数;
  • C:计算区域内的均值后减去的常量,最后作为阈值;

返回值:

  • dst:二值化后的图片数据;

举例:

img = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)
# 计算11*11区域内的均值,再减去4(最后一个参数C)作为阈值
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 4)
# 计算17*17区域内的高斯均值,再减去6(最后一个参数C)作为阈值
th3=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 17, 6)

在这里插入图片描述

实际测试

测试代码

#-*- coding: utf-8 -*-
import time
import cv2

cap = cv2.VideoCapture(0)
#设置图像的高
cap.set(3,240)
#设置图像的宽,这里虽然设置的是240但是实际上是320,
cap.set(4,240)
#写入指定设备
f = open('/dev/fb0','wb')

while True:
    st = time.time()
    ret,img = cap.read()
    if ret:
        #截取240*240的图像,lcd最大能显示的是240*240个16位像素
        img = img[:,0:240]
        #将捕获的一帧图像灰度化处理
        img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        #将灰度图顺时针旋转180度
        img = cv2.rotate(img,cv2.ROTATE_180)
        #自适应阈值算法
        img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
        #转换为16位色彩,(因为lcd是16位显示)
        img = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR565)
        cv2.putText(img, "{0}" .format(str(1 / (time.time() - st))), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 255), 1)
        #写入图像的二进制数据
        f.seek(0)
        f.write(bytearray(img))

实际效果(屏幕有点坏,不影响结果)
在这里插入图片描述

回复777催更

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R329-opencv阈值分割算法——自适应阈值 的相关文章

  • 如何在没有 OpenCv Manager 的情况下运行 OpenCV 代码

    我正在使用 OpenCV4Android 版本 2 4 10 并在 Samsung Galayx GT I9300 上测试我的代码 我遇到的问题是 我必须从 Play 商店下载 Opencv Manager 以便我的 opencv 代码运行
  • 如何在 CMake Makefile 中包含 OpenCV 库

    我希望你可以帮助我 我有一个简单的 CMakeLists txt 以便在 Leopard 10 5 8 上构建我的项目 我正在使用 CMake 2 8 1 目前这是代码 cmake minimum required VERSION 2 8
  • 针对不同相机(RGB 和红外)的 StereoCalibrate

    我在校准两个摄像头时遇到问题 第一个是 RGB 第二个是红外 它们有不同的分辨率 我调整了大小并裁剪了更大的图像 焦距等等 例子 RGB 1920x1080 Infrared 512x424 如何相互校准它们 我应该在stereoCalib
  • 检测骰子的上侧

    是否可以检测骰子的上面 虽然从顶部看这将是一项简单的任务 但从许多角度来看 可以看到多个侧面 Here is an example of a dice feel free to take your own pictures 您通常想知道自己
  • 使用 Unity3D 解决 PnP

    我有一个真实 物理的棍子 上面连接有红外摄像头和一些红外 LED 它们形成了我正在使用的模式 以便使虚拟棍子以与物理棍子相同的方式移动 为此 我在 Python 中使用 OpenCV 并将由solvePnP 计算的旋转和平移向量发送到 Un
  • 如何使用 SimpleBlobDetector 获取 blob 的额外信息?

    robot sherrick 回答了我这个问题 https stackoverflow com a 13534094 1705967 这是他回答的后续问题 cv SimpleBlobDetectorOpencv 2 4 中的 看起来非常令人
  • 从 2 个摄像头捕获(OpenCV、Python)[重复]

    这个问题在这里已经有答案了 所以我试图从 openCV 中的两个摄像头 python 和 windows 7 进行捕获 我用一台相机拍摄的效果很好 你也会注意到我正在对图像做一些时髦的事情 但这并不重要 这是尝试使用两个的代码 import
  • OpenCV Android - 无法解析相应的JNI函数

    我正在尝试按照此处概述的本教程使用 Opencv 设置 Android Studio https www youtube com watch v OTw GIQNbD8 https www youtube com watch v OTw G
  • OpenCV:如何使用图像计算相机和物体之间的距离?

    我是 OpenCV 的新手 我正在使用以下公式来计算距离 distance to object mm focal length mm real height of the object mm image height pixels obje
  • 使用 cv2 在 python 中创建多通道零垫

    我想用 cv2 opencv 包装器在 python 中创建一个多通道 mat 对象 我在网上找到了一些例子 其中 c Mat zeros 被 numpy zeros 替换 这看起来不错 但似乎没有多通道类型适合 看代码 import cv
  • 警告:发生了非法反射访问操作(java 中的便携式 opencv)

    我想做一个便携的opencv将依赖项添加到 maven 文件的应用程序pom xml 简化的代码是 import org opencv core Mat public class Builder public static void mai
  • 如何在 OpenCV 中将 Float Mat 写入文件

    我有一个矩阵 Mat B 480 640 CV 32FC1 包含浮点值 我想将此矩阵写入一个可以打开的文件Notepad https en wikipedia org wiki Windows Notepad or 微软Word https
  • opencv如何使用鼠标事件不规则地选择图像区域? c/c++ [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 最近在学习opencv 有没有办法使用鼠标事件选择图像区域 我已经尝试过三角形的了 如果我想选择特定区域而不是三角形怎么办 谢谢你 我对此进
  • OpenCV Python RTSP 流

    我想使用 RTSP 从 IP 摄像机流式传输视频 但我有一个问题 我已经安装了先决条件 而且我的 RTSP 链接可以在 VlC 播放器上运行 但是当我在编辑器中尝试并运行它时 它说找不到相机 这是我的代码 import cv2 import
  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • 如何将k4a_image_t转换为opencv矩阵? (Azure Kinect 传感器 SDK)

    我开始尝试使用 Azure Kinect Sensor SDK 我经历了官方操作指南 https learn microsoft com en us azure Kinect dk about sensor sdk sensor sdk 我
  • Android API人脸检测与OpenCV/JavaCV人脸检测

    我在 Android 设备上使用了本地 Android 人脸检测 但它似乎很慢 而且我不太确定其可靠性 我还使用了 OpenCV 的人脸检测 但仅限于 PC 而不是 Android 设备 对于 Android 我猜我必须使用 JavaCV
  • 将yuv420p原始数据转换为opencv图像

    我有来自 rtmp 服务器的原始数据 像素格式为 yuv420p 我使用管道来读取数据 但我不知道如何将原始数据解码为图像 command ffmpeg command extend loglevel fatal i rtmp localh
  • 从凸点获取角点

    我编写了算法来提取图像中显示的点 它们形成凸形 我知道它们的顺序 如何从这些点中提取角点 顶部 3 个和底部 3 个 我正在使用opencv 如果你已经有了物体的凸包 并且该包包含角点 那么你需要做的就是简化包直到它只有 6 个点 有很多方
  • 如何平滑循环列向量

    这是一个 OpenCV2 问题 我有一个矩阵代表closed空间曲线 cv Mat

随机推荐

  • Mongodb 定义model中的某个属性 保存任意类型

    参考 Mongoose5 0 文档http www mongoosejs net docs schematypes html 一个啥都可以放的 SchemaType 虽然便利 但也会让数据难以维护 Mixed 可以通过 Schema Typ
  • Spring @Scheduled @Async联合实现调度任务

    定时任务之前一直用的是quartz之类 但是注意到Spring中其实也提供了一种简单的调度注释 Scheduled 也就想尝一下鲜 代码示意如下 Component EnableScheduling public class AsyncTa
  • C++ primer plus 第六版 第十一章 复习题

    第十一章 复习题 1 Stonewt Stonewt operator double n const Stonewt result double total stn Lbs per stn n lbs n result stn total
  • RabbitMQ(三)手动Ack确认

    默认情况下 spring boot data amqp 是自动ACK机制 就意味着 MQ 会在消息发送完毕后 自动帮我们去ACK 然后删除消息的信息 这样依赖就存在这样一个问题 如果消费者处理消息需要较长时间 最好的做法是消费端处理完之后手
  • javascript enval()函数与JSON 之间关系

    概念定义 eval 函数可计算某个字符串 并执行其中的的 JavaScript 代码 enval 函数将把最后一个表达式或者语句所包含的值或引用作为返回值 举例说明一 eval javascrit表达式
  • 关于召开“CIE2019第三届中国IT教育论坛”的通知

    各相关高校 伴随着人工智能 智能制造 云计算 虚拟现实 5G等新技术的发展与日益成熟 全球范围内的新科技革命悄然打响 新一轮科技革命正在重塑世界竞争格局 以新技术 新业态 新产业为特点的新经济蓬勃发展 我国急需培养一批集学科 技术和产业思维
  • ubuntu18.04下mysql数据库安装和C语言连接操作

    数据库在应用系统开发中很常见 在众多的数据库中 mysql总是会占有一席之地 本篇说明一下如何在ubuntu18 04上安装mysql数据库 目录 1 更新环境 2 安装mysql数据库系统 3 检测是否安装成功 4 启动 重启 关闭 删除
  • CLion用于STM32开发

    最近想要复现稚晖君的ElectronBot 发现32的代码用的CLion编写的 而且是C和C 混编的 本来想着用keil再写一个 但是有点浪费时间 而且发现CLion学生可以白嫖 反正以后都要学习C 所以现在就装上吧 注 最终的效果只能下载
  • 克服过拟合和提高泛化能力的20条技巧和诀窍

    克服过拟合和提高泛化能力的20条技巧和诀窍 你是如何提升深度学习模型的效果 这是我经常被问到的一个问题 有时候也会换一种问法 我该如何提高模型的准确率呢 或者反过来问 如果我的网络模型效果不好 我该怎么办 通常我的回答是 具体原因我不清楚
  • 数据结构——查找

    一 查找的基本概念 查找 在数据集合中寻找满足某种条件的数据元素的过程称为查找 查找表 查找结构 用于查找的数据集合称为查找表 它由同一类型的数据元素 或记录 组成 关键字 数据元素中唯一标识该元素的某个数据项的值 使用基于关键字的查找 查
  • 智能合约安全分析,假充值攻击如何突破交易所的防御?

    智能合约安全分析 假充值攻击如何突破交易所的防御 引言 假充值攻击 是指攻击者通过利用交易所在处理充值过程中的漏洞或系统错误 发送伪造的交易信息到交易所钱包地址 这些伪造的交易信息被交易所误认为是真实的充值请求 并将对应的数字资产或货币添加
  • javascript判断数组和对象中是否存在某元素

    javascript判断数组和对象中是否存在某元素 判断数组 是否存在某个元素 可以用数组的indexOf函数 方法arr indexOf find start find 要找的内容 必须 start 查找开始下标 可选 返回 查找数据所在
  • 【Python】os.path.expanduser() 函数的理解和举例说明

    文章目录 一 函数说明 二 实例说明 一 函数说明 os path expanduser 是 Python 中 os path 模块中的一个函数 用于将路径字符串中的波浪线 扩展为用户的主目录 它的作用是提供跨平台的路径展开功能 使得路径可
  • HTML入门

    web前端 前端开发也叫web前端开发 它指的是基于web的互联网产品的页面 也可叫做界面 开发及功能开发 1 认识HTML HTML是Hyper Text Markup Language 超文本标记语言 的缩写 是构成web页面的基本元素
  • git clone 出现fatal: unable to access ‘https://github.com/xxx: Failed to connect to github.com

    问题描述 使用git clone命令时 出现如下错误 fatal unable to access https github com xxx Failed to connect to github com port 443 Timed ou
  • 多版本 Python 使用 pip 安装 package

    最简单的方式 使用参数指定安装路径 pip install t D python3 5 32bit Lib site packages numpy 叨叨叨 如果电脑上安装了多个版本的Python的话 在需要使用pip安装新package时
  • hive分区表的元数据信息numRows显示为0

    创建分区表 CREATE TABLE dept partition deptno int dname string loc string PARTITIONED BY
  • 2023牛客暑期多校训练营3

    A World Fragments I 将两个二进制数先转换成十进制数 因为只要二进制中有1 就加或减1 加减0是没有用的 所以求两个二进制的差的绝对值 这是在有1的情况下 其实只要不等于0就有1 数是非负整数 所以需要特判 如果第一个二进
  • 10种基于MATLAB的方程组求解方法

    线性方程组的求解包括直接法和迭代法 其中迭代法包括传统的高斯消元法 最速下降法 牛顿法 雅克比迭代法 共轭梯度法 以及智能启发式算法求解法和神经网络学习算法 传统算法可以相互组合改进 智能仿生启发式算法包括粒子群算法 遗传算法 模拟退火算法
  • R329-opencv阈值分割算法——自适应阈值

    R329 opencv阈值分割算法 自适应阈值 在不均匀照明或者灰度值分布不均的情况下 如果使用全局阈值分割 那么得到的分割效果往往会很不理想 这个时候就要你用到自适应阈值算法了 OpenCV提供了自适应的二值化函数 通过该函数可以对图像的