图像二值化

本文介绍了图像二值化的概念及其在计算机视觉中的作用,包括固定阈值和自适应阈值两种二值化方法。通过OpenCV库展示了如何使用threshold()和adaptiveThreshold()函数进行图像二值化操作,并提供了相应的代码示例,涉及固定阈值二值化、自适应阈值二值化以及大津法和三角形法等变换。
摘要由CSDN通过智能技术生成

图像二值化

二值图像顾名思义图像中只有两种颜色的信息,通常是黑色和白色。是将普通图像二值化后得到的图像
图像二值化的作用是为了方便提取图像中的信息二值图像在进行计算机识别时可以增加识别效率

固定阈二值化

threshold()

double cv::threshold(InputArray		src,
                    OutputArray		dst,
                    double			thresh,
                    double			maxVal,
                    int				type)
  • 待二值化图像:图像只能是CV_8UCV_32F两种数据类型。对于图像通道数目的要求与选择的二值化方法相关。
  • dst:二值化后的图像,与输入图像具有相同的尺寸、数据类型和通道数。
  • thresh:二值化的阈值
  • maxval:二值化过程中的最大值,它只在THRESH_BINARYTHRESH_BINARY_INV两种二值化方法中才使用。
  • type:图像二值化方法的标志。
    在这里插入图片描述

自适应阈二值化

adaptiveThreshold

void cv::adaptiveThreshold(InputArray	src,
                          OutputArray	dst,
                          double 		maxValue,
                          int			adaptivMethod,
                          int 			blockSize,
                          double		C)
  • src:待二值化图像
  • dst:二值化后的图像
  • maxValue:二值化最大值
  • adaptivMethod:自适应确定阈值的方法
    • 均值法ADAPTIVE_THERESH_MEAN_c
    • 高斯法ADAPTIVE_THERESH_GAUSSIAN_C
  • thresholdType:选择图像二值化方法的标志,只能是THRESH_BINARY和THRESH_BINARY_INV
  • blockSize:自适应确定阈值的相邻像素邻域大小,一般为3,5,7的奇数
  • C:从平均值或加权平均值中减去的常数,可以为正,也可以为负。

代码展示

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

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("lena.png");
	if (img.empty())
	{
		cout << "input picture wrong!" << endl;
		return -1;
	}

	Mat gray;
	cvtColor(img, gray, COLOR_RGB2GRAY);
	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("threshold.png", IMREAD_GRAYSCALE);
	Mat img_Thr_O, img_Thr_T;
	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);

	// 灰度图像自适应二值化
	Mat adaptive_mean, adaptive_gauss;
	adaptiveThreshold(img_Thr, adaptive_mean, 255, ADAPTIVE_THRESH_MEAN_C,
		THRESH_BINARY, 55, 0);
	adaptiveThreshold(img_Thr, adaptive_gauss, 255, ADAPTIVE_THRESH_GAUSSIAN_C,
		THRESH_BINARY, 55, 0);

	imshow("adaptive_man:", adaptive_mean);
	imshow("adaptive_gauss", adaptive_gauss);
	waitKey(0);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值