使用OpenCV C++进行图像二值化操作

这篇具有很好参考价值的文章主要介绍了使用OpenCV C++进行图像二值化操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

threshold()

double cv::threshold( 	
        InputArray  src,
		OutputArray dst,
		double  	thresh,
		double  	maxval,
		int  	    type 
	) 	

threshold()将固定阈值应用于多通道图像阵列,通常用于从灰度图像中获得二值图像或用于去除噪声,即滤除值过小或过大的像素。该函数支持几种类型的阈值设置,它们由类型参数决定。

参数

src:输入数组(多通道,8位或32位浮点数)

dst:输出数组(与src的尺寸、类型、通道数相同)

thresh:阈值

maxval:最大值

type:阈值类型

返回值

如果使用Otsu或Triangle方法,将返回计算出的阈值。

ThresholdTypes

阈值操作的类型

opencv c++ 二值化,OpenCV,opencv,c++,图像处理

opencv c++ 二值化,OpenCV,opencv,c++,图像处理

  1. THRESH_BINARY(二值化阈值处理):

    • THRESH_BINARY方法将图像中的像素值与给定的阈值进行比较,大于等于阈值的像素被设置为一个最大值(通常为255),小于阈值的像素被设置为0。
    • 最佳用途:适用于分离目标物体和背景,或者在需要检测物体边缘时,可以用于边缘检测。
  2. THRESH_BINARY_INV(反二值化阈值处理):

    • THRESH_BINARY_INV与THRESH_BINARY相反,大于等于阈值的像素被设置为0,小于阈值的像素被设置为最大值。
    • 最佳用途:适用于与THRESH_BINARY相反的情况,或者在需要突出物体的特定区域时,可以用于增强物体的特征。
  3. THRESH_TRUNC(截断阈值处理):

    • THRESH_TRUNC方法保留小于等于阈值的像素值,而大于阈值的像素值被设置为阈值。
    • 最佳用途:适用于保留图像中的某个范围内的像素值,可以用于增强图像的对比度。
  4. THRESH_TOZERO(截断为零阈值处理):

    • THRESH_TOZERO方法保留大于等于阈值的像素值,小于阈值的像素值被设置为零。
    • 最佳用途:适用于突出图像中的亮部分,可以用于增强图像的亮部细节。
  5. THRESH_TOZERO_INV(反截断为零阈值处理):

    • THRESH_TOZERO_INV与THRESH_TOZERO相反,大于等于阈值的像素值被设置为零,小于阈值的像素值保持不变。
    • 最佳用途:适用于突出图像中的暗部分,可以用于增强图像的暗部细节。

 (上述回答来自ChatGPT)

特殊值THRESH_OTSU或THRESH_TRIANGLE可以与上述值中的一个组合。在这些情况下,函数使用Otsu's或Triangle算法确定最佳阈值,并使用它而不是指定的阈值。

THRESH_OTSU与THRESH_TRIANGLE分别使用Otsu和Triangle算法选择最佳阈值。

测试代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
	Mat img = imread("path");
	Mat gray;

	cvtColor(img, gray, COLOR_BGR2GRAY);

	Mat	imgB, imgBInv, imgTrunc, imgTZ, imgTZInv;

    // 也可进行彩色图像的阈值化
	threshold(gray, imgTrunc, 125, 255, THRESH_TRUNC);
	threshold(gray, imgB, 125, 255, THRESH_BINARY);
	threshold(gray, imgBInv, 125, 255, THRESH_BINARY_INV);
	threshold(gray, imgTrunc, 125, 255, THRESH_TRUNC);
	threshold(gray, imgTZ, 125, 255, THRESH_TOZERO);
	threshold(gray, imgTZInv, 125, 255, THRESH_TOZERO_INV);

    // 使用Otsu算法
    // threshold(gray, imgB, 125, 255, THRESH_BINARY | THRESH_OTSU);
	
	imshow("gray", gray);
	imshow("imgTrunc", imgTrunc);
	imshow("imgB", imgB);
	imshow("imgBInv", imgBInv);
	imshow("imgTZ", imgTZ);
	imshow("imgTZInv", imgTZInv);

	waitKey(0);
}

运行结果:

opencv c++ 二值化,OpenCV,opencv,c++,图像处理

opencv c++ 二值化,OpenCV,opencv,c++,图像处理

opencv c++ 二值化,OpenCV,opencv,c++,图像处理

 adaptiveThreshold()

void cv::adaptiveThreshold 	( 	
        InputArray  src,
		OutputArray dst,
		double  	maxValue,
		int  	     adaptiveMethod,
		int  	    thresholdType,
		int  	    blockSize,
		double  	C 
	) 	

对图像阵列应用自适应阈值,该函数根据公式将灰度图像变换为二值图像:

opencv c++ 二值化,OpenCV,opencv,c++,图像处理

 其中T(x,y)是针对每个像素单独计算的阈值。

参数

src:八位单通道图像

dst:与src尺寸和类型相同的目标图像

maxValue:赋给满足条件的像素的非零值

adaptiveMethod:使用的自适应阈值算法

thresholdType:阈值类型,必须为THRESH_BINARY或THRESH_BINARY_INV

blockSize:用于计算像素阈值的像素邻域大小:3,5,7......

C:从平均值或加权平均值中减去的常数。通常,它是正的。

AdaptiveThresholdTypes

opencv c++ 二值化,OpenCV,opencv,c++,图像处理

测试代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
	Mat img = imread("path");
	Mat gray;

	cvtColor(img, gray, COLOR_BGR2GRAY);

	Mat	imgB, imgMean, imgGaussian;

	threshold(gray, imgB, 125, 255, THRESH_BINARY);
    // adaptiveThreshold() 只能接受灰度图像
	adaptiveThreshold(gray, imgMean, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 7, 0);
	adaptiveThreshold(gray, imgGaussian, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 0);

	imshow("gray", gray);
	imshow("imgB", imgB);
	imshow("imgMean", imgMean);
	imshow("imgGaussian", imgGaussian);

	waitKey(0);
}

运行结果:

opencv c++ 二值化,OpenCV,opencv,c++,图像处理文章来源地址https://www.toymoban.com/news/detail-775131.html

到了这里,关于使用OpenCV C++进行图像二值化操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV(八):图像二值化

    目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术,用于将图像转换为二值图像。在固定阈值二值化中,像素值根据一个预定义的阈值进行分类,大于阈值的像素被设置为白色,而小于或等于

    2024年02月10日
    浏览(36)
  • opencv(20) 图像阈值(二值化)

    二值化核心思想,设阈值,大于阈值的为0(黑色)或 255(白色),使图像称为黑白图。 阈值可固定,也可以自适应阈值。 自适应阈值一般为一点像素与这点为中序的区域像素平均值或者高斯分布加权和的比较,其中可以设置一个差值也可以不设置。 图像的阈值化旨在提取

    2024年02月02日
    浏览(39)
  • OpenCV图像处理----图像的二值化

    图像二值化( Image Binarization) 就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。 二值化的原理 OpenCV提供的图像二值化API threshold()方法参数: 图片矩阵 阈值 图片中的最大值 二值化的方式 二值化的方式: THRESH_BINARY 高于阈值改为

    2024年02月12日
    浏览(32)
  • 【C++ OpenCV】阈值二值化、阈值反二值化、截断、阈值取零、阈值反取零、自适应阈值使用方法以及时机

    阈值:简单来说就是一把分割图像像素的标尺,在二值化处理中有固定阈值和自适应阈值两种形式。 那么什么时候用固定阈值,什么时候使用自适应阈值呢? 答:当图像 质量较好 ,且目标和背景容易区分时,可以采用固定阈值 当图像 质量差 ,且有 阴影过度 ,虽然使用大

    2024年02月07日
    浏览(38)
  • OpenCV常用功能——灰度处理和图像二值化处理

    1.1 cvtColor函数 函数原型: 功能 :转换图像颜色空间。 参数 : src: 输入图像。 code: 颜色空间转换代码。可以取常量cv2.COLOR_BGR2GRAY或cv2.COLOR_RGB2GRAY。 dst: 输出图像。 dstCn: 输出图像的通道数,如果设置为0,则跟随转换代码自动设置。 内置函数示例代码: 灰度处理的原理是将

    2024年02月08日
    浏览(47)
  • 【Opencv--自适应图像二值化】cv2.adaptiveThreshold()

    在这里 cv2.threshold函数 介绍了普通的opencv图像阈值处理函数。但threshold 的图像阈值处理对于某些光照不均的图像,这种全局阈值分割的方法并不能得到好的效果。 图像阈值化操作中,我们更关心的是从二值化图像中分离目标区域和背景区域,仅仅通过固定阈值很难达到理想

    2024年02月07日
    浏览(32)
  • 【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

      在计算机中用一般用 M x N 的矩阵来表示一幅尺寸大小为 M x N 的数字图像,矩阵元素的值就是该图像对应位置上的像素值。    对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。 1、灰度图:   灰度图是每个像素只有一

    2024年04月14日
    浏览(37)
  • OpenCV-Python学习(10)—— OpenCV 图像二值化处理(cv.threshold)

    1. 学习目标 理解图像的分类,不同类型的图像的区别; 对图像进行二值化处理,对【 cv.threshold 】函数的理解。 2. 图像分类 2.1 不同类型图像说明 按照颜色对图像进行分类,可以分为二值图像、灰度图像和彩色图像。 二值图像: 只有黑色和白色两种颜色的图像。 每个像素

    2024年02月03日
    浏览(39)
  • OPENCV C++(三)二值化灰度函数+调用摄像头+鼠标响应+肤色检测

    图像 目标图像 rgb转灰度 灰度图,目标图,阈值,大于阈值的转换的像素值,方法为大津法 灰度图,目标图,大于阈值的转换的像素值,自适应方法,二值化方法 虽然人物的信息丢失了很多,但是背景基本上被去掉了。丢失的人物的信息可以通过位运算等恢复。在去除背景

    2024年02月14日
    浏览(29)
  • opencv二值化详解

      大家好,今天来跟大家讲讲 opencv二值化。 先从一个比较经典的方法开始讲解,看 opencv官方文档: 二值化(binary)的定义:在一个输入图像中,将其一个像素点设置为0,将其两个像素点设置为1。 二值化可以使图像中的每个像素值都被指定为0或1。在二值化之前,每个像素都

    2024年02月07日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包