OpenCV_图像二值化

2023-05-16

  对图像进行二值化的关键函数为cvThreshold,它采用Canny方法对图像进行边缘检测:

void cvThreshold (
    const CvArr *src, CvArr *dst, double threshold,
    double max_value, int threshold_type );

参数src表示输入图像,必须为单通道灰度图;参数dst表示输出的边缘图像,为单通道黑白图;参数threshold表示阈值;参数max_value表示最大值;参数threshold_type表示运算方法,在OpenCVimgproc\types_c.h中可以找到运算方法的定义:

enum { /* Threshold types */
    CV_THRESH_BINARY     = 0, /* value = value > threshold ? max_value : 0     */
    CV_THRESH_BINARY_INV = 1, /* value = value > threshold ? 0 : max_value     */
    CV_THRESH_TRUNC      = 2, /* value = value > threshold ? threshold : value */
    CV_THRESH_TOZERO     = 3, /* value = value > threshold ? value : 0         */
    CV_THRESH_TOZERO_INV = 4, /* value = value > threshold ? 0 : value         */
    CV_THRESH_MASK       = 7,
    /* use Otsu algorithm to choose the optimal threshold value;
       combine the flag with one of the above CV_THRESH_* values */
    CV_THRESH_OTSU       = 8
};

代码如下:

#include <opencv2/opencv.hpp>

IplImage *g_pGrayImage = NULL;
IplImage *g_pBinaryImage = NULL;
const char *pstrWindowsBinaryTitle = "二值图";

void on_trackbar ( int pos ) {
    /* 转为二值图 */
    cvThreshold ( g_pGrayImage, g_pBinaryImage, pos, 255, CV_THRESH_BINARY );
    cvShowImage ( pstrWindowsBinaryTitle, g_pBinaryImage ); /* 显示二值图 */
}

int main ( int argc, char **argv ) {
    const char *pstrWindowsSrcTitle = "原图";
    const char *pstrWindowsToolBarName = "二值图阈值";

    IplImage *pSrcImage = cvLoadImage ( "zzjb.jpg", CV_LOAD_IMAGE_UNCHANGED ); /* 从文件中加载原图 */
    /* 转为灰度图 */
    g_pGrayImage = cvCreateImage ( cvGetSize ( pSrcImage ), IPL_DEPTH_8U, 1 );
    cvCvtColor ( pSrcImage, g_pGrayImage, CV_BGR2GRAY );
    g_pBinaryImage = cvCreateImage ( cvGetSize ( g_pGrayImage ), IPL_DEPTH_8U, 1 ); /* 创建二值图 */
    /* 显示原图 */
    cvNamedWindow ( pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE );
    cvShowImage ( pstrWindowsSrcTitle, pSrcImage );
    cvNamedWindow ( pstrWindowsBinaryTitle, CV_WINDOW_AUTOSIZE ); /* 创建二值图窗口 */
    /* 滑动条 */
    int nThreshold = 0;
    cvCreateTrackbar ( pstrWindowsToolBarName, pstrWindowsBinaryTitle, &nThreshold, 254, on_trackbar );
    on_trackbar ( 1 );
    cvWaitKey ( 0 );
    cvDestroyWindow ( pstrWindowsSrcTitle );
    cvDestroyWindow ( pstrWindowsBinaryTitle );
    cvReleaseImage ( &pSrcImage );
    cvReleaseImage ( &g_pGrayImage );
    cvReleaseImage ( &g_pBinaryImage );
    return 0;
}

在这里插入图片描述

OpenCV还有个cvAdaptiveThreshold函数,这个函数会使用Otsu算法(大律法或最大类间方差法)来计算出一个全局阈值,然后根据这个阈值进行二值化。

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

OpenCV_图像二值化 的相关文章

  • PX4 SITL Gazebo 仿真时 libgazebo_multirotor_base_plugin 插件运行时出错

    PX4 SITL Gazebo 仿真时 libgazebo multirotor base plugin 插件运行时出错 问题描述原因分析解决办法总结 问题描述 在 Gazebo 中进行 PX4 的软件在环仿真时 xff0c 执 make
  • Jetson AGX Xavier 正确上手教程

    概览 1 开机1 1 配件1 2 需要准备的器材1 3 连接设备 2 刷机2 1 更换主机的 apt get 源2 2 在主机上安装 SDK ManagerStep 1Step xff12 Step xff13 烧录 OS 镜像安装 SDK
  • Matplotlib绘图显示缺少中文字体-RuntimeWarning: Glyph 8722 missing from current font.

    pyplot 并不默认支持中文显示 xff0c 也没有自带中文字体 xff0c 因此需要自行下载所需字体 xff0c 并修改 rcParams 参数来显示中文 下面以 SimHei xff08 黑体 xff09 字体为例进行说明 说明 xf
  • Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )

    Win10 系统安装 Linux 子系统教程 WSL2 43 Ubuntu 20 04 43 Gnome 桌面 xff09 1 WSL 简介1 1 什么是 WSL xff1f 1 2 WSL1 与 WSL2 2 安装 WSL2 1 安装 W
  • Ubuntu 桌面美化教程

    将 Ubuntu 桌面美化成 Mac 风格 xff0c 效果如下 1 美化任务栏 Ubuntu 20 04 默认的任务栏在桌面左侧 xff0c 不使用时会自动隐藏 安装 plank dock 工具可以在桌面底部设置一个常驻任务栏 xff08
  • Git 图解教程

    Git 图解教程 基础篇 git 简介 安装与配置 安装 git 配置 git 创建版本库 跟踪修改 提交修改 比较文件 辅助命令 创建分支 合并分支 git merge git rebase 高级篇 移动提交记录 分离的 HEAD 相对引
  • Doxygen + Graphviz 代码自动化分析

    Doxygen 43 Graphviz 代码自动化分析 目录 1 实际需求2 工具简介3 使用说明4 代码注释规范5 参考 1 实际需求 在开发程序时 xff0c 需要编写对应的说明文档 在阅读现有的项目源代码时 xff0c 需要梳理函数间
  • Microsoft Learn: Docker入门教程

    Microsoft Learn Docker入门教程 1 Introduction2 What is Docker3 How Docker images work4 How Docker containers work5 When to u
  • 将kitti数据集中的velodyne points转换为ROS bag文件

    kitti数据集中包含了相机图像 激光扫描得到的点云信息 高精度GPS测量信息和IMU加速度信息 xff0c 用于移动机器人与自动驾驶方面的研究 如下为数据采集平台示意图 kitti数据集中的激光扫描数据是以二进制文件形式存储的 xff0c
  • 使用 Dockerfile 创建一个简单的容器

    Dockerfile Dockerfile 是用于指导 docker 创建自定义 image 的一系列指令 xff0c 是用于创建 image 的蓝图 现在有一个简单的 node 项目 其中Dockerfile 是后面加的 xff0c 初始
  • 导航英语专业词汇——不停更新

    惯性导航 inertia 惯性INS 惯性导航系统GINS 平台惯性导航系统SINS 捷联惯性导航系统IMU 惯性导航元件gyroscope 陀螺仪accelerometer 加速度计 SLAM 词汇词性意思 导航中用 SLAM词组同步定位
  • 不止于linux SSH 基本用法-正反向代理-内外网穿透

    最近小伙伴们纷纷进了实验室 xff0c 就冒出了一系列关于控制远程机器的问题 xff0c 我觉得我还是有必要科普一下的 约定 本文不讲解 Linux 使用方法 xff0c 只讲解机器之间的通信方法 下文中行首的 local 以及 remot
  • 传感器数据滤波算法

    嵌入式应用中 xff0c 系统获取的传感器数据通常不能够直接供应用使用 xff08 存在噪声干扰 xff1a 低频噪声或高频噪声 xff09 xff0c 一般通过一种或者多种滤波算法结合 xff0c 对原始数据进行滤波处理 xff0c 在保
  • 写了一个生成reStructuredText表格的vim插件

    vim官网上有一个rst table xff0c 不过不太好用 xff0c 最大的问题是对中文的支持有欠缺在 f后 xff0c 中文所在的cell的长度会计算错误 扫了一眼它的源码使用了python写的插件 xff0c 所以我就心血来潮也想
  • Ubuntu 16.04 一系列软件安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法

    1 简介 Ubuntu 16 04安装完后 还需要做一些配置才能愉快的使用 包括添加软件源 安装搜狗输入法 Chrome浏览器 网易云音乐 配置快捷键 安装git等等 下面就跟着我来配置吧 just do it 2 版本选择 如果你是小白
  • 从入门到放弃之生产环境基于Kubernetes V1.21.10搭建高可用集群

    1 资源规划 名称系统配置IP组件k8s master01CentOS 7 94核8G 500G存储172 16 97 27kube apiserver lt br gt kube controller manager lt br gt k
  • ros c++ 开发错误“集锦”

    集锦 xff0c 才能经常回放 1 error s getMD5Sum is not a member2 ROS datatype md5sum错误 持续更新 1 error s getMD5Sum is not a member 目前观测
  • 嵌入式ARM算法移植与优化

    目录 一 算法优化指导思想 1 算法优化基本原则 2 算法优化方法 二 编译器优化 1 xff0c 函数内联 2 xff0c 消除公共子表达式 3 xff0c 循环展开 4 xff0c GCC优化选项 5 xff0c ARMCC优化选项 三
  • OV2640摄像头驱动与应用代码

    目录 一 摄像头基础 1 1 OV2640参数 1 2 视场角与镜头 二 OV2640驱动 三 OV2640视频接入
  • ubuntu16.04常用软件安装

    目录 1 办公软件 xff1a WPS 2 文本比较工具 Meld 3 版本管理 xff1a git 4 安装wine 5 安装常用库 6 配置阿里源 7 vim 8 OpenCV 9 QT 10 VSCode 11 gparted 1 办

随机推荐

  • RK1109 NPU算法测试demo

    目录 一 矩阵乘法测试 二 测试结果 一 矩阵乘法测试 通过一个简单的矩阵乘法 xff0c 和L2距离计算来测试NPU计算性能与启动NPU的一般方法 具体代码如下 xff1a Example Calculate x y 2 using Ma
  • VS2015远程连接虚拟机

    目录 一 安装VC Linux exe 二 打开VS 选择新建项目 三 配置VS 四 创建项目 一 安装VC Linux exe 下载地址 xff1a 二 打开VS 选择新建项目 三 配置VS 打开VS xff0c 菜单栏点击工具 gt 选
  • MiniFly微型四轴学习与开发日志(四)

    文章目录 任务创建和删除 API 函数任务调度器开启函数分析临界区atkp c 任务创建和删除 API 函数 FreeRTOS 最基本的功能就是任务管理 xff0c 而任务管理最基本的操作就是创建和删除任务 xff0c FreeRTOS 的
  • Git常用命令

    目录 一 提交代码 二 更新本地代码 三 修改项目中Git远程仓库地址 1 开启Git Bash 2 查看git远程仓库地址 3 修改远程仓库地址 4 检查新地址 Git常用命令备忘 一 提交代码 1 在项目内点击Git Bash Here
  • linux动态库找不到

    linux动态库找不到 一 分析二 解决方式一方式二方式三 三 如何检查RPATH的值 问题状态 xff1a xxx so cannot open shared object file No such file or directory 一
  • ubuntu14.04LTS下创建Qt5.5.1桌面快捷方式

    以下是网上的方法 xff0c 我试了一下 xff0c 反正没成功 Ubuntu14 04LTS在桌面上创建Qt5 4 1快捷方式 1 下载并安装Qt5 4 1 xff0c 我的安装路径时home cao Qt5 4 1 xff08 默认路径
  • Linux操作系统之一:简述Linux系统开机引导和启动过程

    Linux操作系统之一 xff1a 简述Linux系统开机引导和启动过程 操作系统的启动分为两个阶段 xff1a 引导boot 启动startup 引导阶段开始于打开电源开关 xff0c 结束于内核初始化完成和 systemd 进程成功运行
  • TCP IP与UDP含义 区别 总结

    TCP IP协议 xff08 一 xff09 网络基础知识 OSI参考模型中每个分层的作用 1 3 1 应用层 xff1a 为应用程序提供服务并规定应用程序中通信相关的细节 xff1b 包括的协议如下 xff1a xff1a 超文本传输协议
  • STM32F103 CAN总线配置总结

    stm32的can总线的配置如下 xff1a CAN InitStructure CAN TTCM 61 DISABLE 禁止时间触发通信模式 CAN InitStructure CAN ABOM 61 DISABLE CAN InitSt
  • 新版标准日本语初级_第四十八课

    语法 1 自谦语 xff1a 自谦语是通过压低说话人自身或说话人一方的形式表示敬意的表达方式 如跟别人谈到自己的家人或自己公司的上级时 xff0c 也使用自谦语 2 43 一类动 二类动 或 43 三类动的汉字部分 xff1a 这是自谦语中
  • STM32同时使用多个定时器

    代码如下 xff1a span class token keyword void span span class token function TIM2 IRQHandler span span class token punctuatio
  • Qt之定时器

    文章目录 QObject类的定时器定时器类QTimer Qt使用定时器有两种方法 xff0c 一种是使用QObiect类的定时器 xff0c 一种是使用QTimer类 定时器的精确性依赖于操作系统和硬件 xff0c 大多数平台支持20ms的
  • ucos信号量集

    事件标志组 信号量集 的使用 xff1a span class token keyword static span OS STK task testled span class token punctuation span STARTUP
  • Ubuntu 18.04 swap分区扩展

    在开始之前 xff0c 请先使用命令检查您的 Ubuntu 系统的SWAP 分区 sudo swapon show 创建 swap 的文件 xff08 分配 1G 的swap分区大小 xff09 sudo fallocate l 1G sw
  • ping通ipv6地址

    文章目录 WindowsLinux为什么Link local地址后面要有百分号 xff1f Windows ping ipv6主机名的方法如下 xff1a span class token function ping span 6 ipv6
  • STM32_串口的DMA接收

    STM32使用DMA在串口接收数据的方法如下 xff1a span class token macro property span class token directive hash span span class token direc
  • CopyMakeBorder函数

    其作用是复制图像并且制作边界 处理边界卷积 xff1a span class token keyword void span span class token function cvCopyMakeBorder span span clas
  • Altium designer中文化设置

    Altium designer中文化设置的步骤如下 xff0c 然后重启软件即可 xff1a
  • zipfile.BadZipFile: File is not a zip file

    zipfile BadZipFile File is not a zip file的问题复现步骤 xff1a 使用openpyxl的save函数 xff0c 将数据保存在Excel文件中 在没有保存完成的情况下 xff0c 又使用load
  • OpenCV_图像二值化

    对图像进行二值化的关键函数为cvThreshold xff0c 它采用Canny方法对图像进行边缘检测 xff1a span class token keyword void span span class token function c