OpenCV之阈值

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons


一、阈值

必须是对 单通道 图( 特别是灰度图 )进行阈值操作

1.固定阈值:Threshold()

原型

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

参数

  • src:输入图像
  • dst:输出图像
  • thresh:double类型的阈值数(0-255)
  • maxval:阈值的最大值(0-255),只在THRESH_BINARY和THRESH_BINARY_INV下有效
  • type:阈值类型(分别对应0、1、2、3、4)。
    一般使用THRESH_BINARY和THRESH_BINARY_INV将灰度图转化为二值图(非黑即白)
    在这里插入图片描述
    在这里插入图片描述

阈值和阈值类型的滑动条

#include<opencv2/opencv.hpp>
using namespace cv;

#define WINDOW_NAME "ThresholdWindow"

int g_thresholdValue=100;
int g_thresholdType=0;
Mat g_srcImage,g_dstImage;

void onChange(int,void*)
{
	threshold(g_srcImage,g_dstImage,g_thresholdValue,255,g_thresholdType);
	imshow(WINDOW_NAME,g_dstImage);
}

int main()
{
	g_srcImage=imread("M569_989_066.jpg",0);
	namedWindow(WINDOW_NAME,WINDOW_NORMAL);
	createTrackbar("ThresholdType",WINDOW_NAME,&g_thresholdType,4,onChange);
	createTrackbar("ThresholdValue",WINDOW_NAME,&g_thresholdValue,255,onChange);
	onChange(0,0);
	waitKey();
	return 0;
}

在这里插入图片描述

阈值为180左右,四种识别效果最好。

2.自适应阈值:adaptiveThreshold()

原型

void adaptiveThreshold(
	InputArray src,
	OutputArray dst,
	double maxval,
	int adaptiveMethod,
	int thresholdType,
	int blockSize,
	double c
);

参数

  • src:输入图像
  • dst:输出图像
  • maxval:阈值最大值
  • type:阈值类型
  • adaptiveMethod:
  • thresholdType:
  • blockSize:
  • c:

3.srcImage=srcImage>180

srcImage是灰度图

Mat srcImage=imread("M569_989_066.jpg",0);
srcImage=srcImage>180;
imshow("Effect",srcImage);
//效果是二值图,和二进制阈值类型的一样。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sandalphon4869/article/details/94609807