OpenCV进阶--图像二值化

        图像像素的灰度值无论在什么数据类型中都只有最大值和最小值两种取值,因此成为二值图像。二值图形色彩种类少,可以进行高度的压缩,节省了内存空间。在OpenCV中提供了threshold()函数和adaptiveThreshold()两个函数用于实现图像的二值化。

一、threshold()函数

函数原型:

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

src:待二值化的图像,图像只能是CV_8U和CV_32F两种数据类型。对于图像通道数目的要求与选择的二值化方法相关。

dst:二值化的图像,与输入图像具有相同的尺寸、数据类型和通道数。

thresh:二值化的阈值。

type:二值化过程的最大值,它只在THRESH_BINARY和THRESH_BINARY_INV两种二值化方法中才使用。

type:选择图像二值化方法的标志。

二值化方法可选择的标志及含义
标志参数简记作用
THRESH_BINARY0灰度值大于阈值的最大值,其他值为0
THRESH_BINARY_INV1灰度值大于阈值的位0,其他值为最大值
THRESH_TRUNC2灰度值大于阈值的位阈值,其他值不变
THRESH_TOZERO3灰度值大于阈值的不变,其他值为0
THRESH_TOZERO_INV4灰度值大于阈值的为0,其他值不变
THRESH_OTSU8大津法自动寻求全局阈值
THRESH_TRIANGLE16三角形法自动寻求区局阈值

二、adaptiveThreshold()函数

函数原型:

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

src:待二值化的图像,图像只能是CV_8UC1数据类型。

dst:二值化的图像,与输入图像具有相同的尺寸、数据类型。

maxValue:二值化的最大值。

adaptiveMethod:自适应确定阈值的方法,分为均值法ADAPTIVE_THRESH_MEAN_C和高斯法ADAPTIVE_THRESH_GAUSSIAN_C两种。

thresholdType:选择图像二值化方法的标志,只能是THRESH_BINARY和THRESH_BINARY_INV。

blockSize:自适应确定阈值的像素邻域大小,一般为3,5,7的奇数。

C:从平均值或者加权平均值中减去的常数,可以为正,也可以为负。

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

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("954ea3bf5f65e2a6140a2d22e000ac4.png");
	if (img.empty())
	{
		cout << "请确认图像文件名称是否正确" << endl;
		return -1;
	}

	Mat gray;
	cvtColor(img, gray, COLOR_BGR2GRAY);
	Mat img_B, img_B_V, gray_B, gray_B_V, gray_T, gray_T_V, gray_TRUNC;


	//彩色图像二值化
	threshold(img, img_B, 125, 255, THRESH_BINARY);
	threshold(img, img_B_V, 125, 255, THRESH_BINARY_INV);
	imshow("img_B", img_B);
	imshow("img_B_V", img_B_V);

	//灰度图BINARY二值化
	threshold(gray, gray_B, 125, 255, THRESH_BINARY);
	threshold(gray, gray_B_V, 125, 255, THRESH_BINARY_INV);
	imshow("gray_B", gray_B);
	imshow("gray_B_V", gray_B_V);

	//灰度图TOZERO变换
	threshold(gray, gray_T, 125, 255, THRESH_TOZERO);
	threshold(gray, gray_T_V, 125, 255, THRESH_TOZERO_INV);
	imshow("gray_T", gray_T);
	imshow("gray_T_V", gray_T_V);

	//灰度图像TRUNC变换
	threshold(gray, gray_TRUNC, 125, 255, THRESH_TRUNC);
	imshow("gray_TRUNC", gray_TRUNC);
	
	//灰度图像大律法和三角形法二值化
	Mat img_Thr = imread("f9afe18da2fb1fa2ff72c4d8b29fe6a.png");
	Mat img_Thr_O, img_Thr_T;
	cvtColor(img_Thr, img_Thr, COLOR_BGR2GRAY);
	threshold(img_Thr, img_Thr_O, 100, 255, THRESH_BINARY | THRESH_OTSU);
	threshold(img_Thr, img_Thr_T, 125, 255, THRESH_BINARY | THRESH_TRIANGLE);
	imshow("img_Thr", img_Thr);
	imshow("img_Thr_O", img_Thr_O);
	imshow("img_Thr_T", img_Thr_T);
	waitKey(0);
	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值