c++视觉处理----固定阈值操作:Threshold()函数,实时处理:二值化,反二值化,截断,设为零,反向设为零

本文主要是介绍c++视觉处理----固定阈值操作:Threshold()函数,实时处理:二值化,反二值化,截断,设为零,反向设为零,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

固定阈值操作: Threshold()函数

cv::threshold() 函数是OpenCV中用于执行固定阈值二值化操作的函数。它可以用来将图像中的像素值根据用户定义的阈值转换为二进制值(0或255),以便进行图像分割、物体检测和特征提取等任务。

cv::threshold() 函数的基本语法如下:

double cv::threshold(cv::InputArray src,       // 输入图像cv::OutputArray dst,      // 输出图像double thresh,            // 阈值double maxval,            // 阈值以上像素的新值int type                  // 阈值类型
);

参数解释:

  • src:输入图像,应为单通道灰度图像。
  • dst:输出图像,函数将处理后的图像存储在这里。
  • thresh:阈值,用于将像素分为两类。像素值大于等于阈值将被赋予 maxval 值,小于阈值的将被赋予0。
  • maxval:阈值以上像素的新值,通常为255。
  • type:阈值类型,用于指定阈值化的方式,常见的类型包括
    • cv::THRESH_BINARY(二值化)、
    • cv::THRESH_BINARY_INV(反二值化)、
    • cv::THRESH_TRUNC(截断)、
    • cv::THRESH_TOZERO(设为零)、
    • cv::THRESH_TOZERO_INV(反向设为零)等。

以下是一个简单的示例代码,演示如何使用 cv::threshold() 函数对图像进行二值化:

#include <opencv2/opencv.hpp>int main() {cv::Mat image = cv::imread("input_image.jpg", cv::IMREAD_GRAYSCALE);if (image.empty()) {std::cerr << "Failed to open the image!" << std::endl;return -1;}// 设置阈值和阈值类型double thresholdValue = 128;double maxVal = 255;int thresholdType = cv::THRESH_BINARY; // 二值化// 应用阈值操作cv::Mat thresholdedImage;cv::threshold(image, thresholdedImage, thresholdValue, maxVal, thresholdType);// 显示处理后的图像cv::imshow("Thresholded Image", thresholdedImage);cv::waitKey(0);return 0;
}

在这里插入图片描述

使用相机实时处理:二值化,反二值化,截断,设为零,反向设为零

#include <opencv2/opencv.hpp>// 回调函数,用于处理滑动条变化
void onThresholdChange(int thresholdType, void* userdata) {cv::Mat* inputImage = static_cast<cv::Mat*>(userdata);// 初始化阈值和阈值类型int thresholdValue = 128;int maxVal = 255;// 应用不同类型的阈值操作switch (thresholdType) {case 0: // 二值化cv::threshold(*inputImage, *inputImage, thresholdValue, maxVal, cv::THRESH_BINARY);break;case 1: // 反二值化cv::threshold(*inputImage, *inputImage, thresholdValue, maxVal, cv::THRESH_BINARY_INV);break;case 2: // 截断cv::threshold(*inputImage, *inputImage, thresholdValue, maxVal, cv::THRESH_TRUNC);break;case 3: // 设为零cv::threshold(*inputImage, *inputImage, thresholdValue, maxVal, cv::THRESH_TOZERO);break;case 4: // 反向设为零cv::threshold(*inputImage, *inputImage, thresholdValue, maxVal, cv::THRESH_TOZERO_INV);break;default:break;}// 显示处理后的图像cv::imshow("Thresholded Image", *inputImage);
}int main() {cv::VideoCapture cap(0); // 打开本地相机if (!cap.isOpened()) {std::cerr << "Failed to open the camera!" << std::endl;return -1;}cv::Mat frame;cap >> frame; // 读取一帧图像// 创建窗口cv::namedWindow("Thresholded Image");// 初始化阈值类型滑动条int initialThresholdType = 0;cv::createTrackbar("Threshold Type", "Thresholded Image", &initialThresholdType, 4, onThresholdChange, &frame);// 显示原始图像cv::imshow("Thresholded Image", frame);// 循环捕获并处理图像,直到按下ESC键退出while (true) {int key = cv::waitKey(10);if (key == 27) // 按下ESC键退出循环break;cap >> frame; // 读取一帧图像// 实时更新阈值类型滑动条的值,触发回调函数cv::setTrackbarPos("Threshold Type", "Thresholded Image", initialThresholdType);// 显示原始图像// cv::imshow("Thresholded Image", frame);}// 关闭相机和窗口cap.release();cv::destroyAllWindows();return 0;
}

这篇关于c++视觉处理----固定阈值操作:Threshold()函数,实时处理:二值化,反二值化,截断,设为零,反向设为零的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/187398

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc