OpenCV学习笔记之阈值操作

什么是阈值

简单来说,阈值是图像分割的标尺,这个标尺根据阈值类型来确定。

阈值方法(分割方法)

  1. 阈值二值化(threshold binary):THRESH_BINARY,规定某个阈值,当像素值大于这个阈值的时候为255,当像素值小于这个阈值的时候为0。
  2. 阈值反二值化(threshold binary Inverted)THRESH_BINARY_INY,规定某个阈值,当像素值小于这个阈值的时候为255;当像素值大于这个阈值的时候为0。
  3. 截断(truncate)THRESH_TRUNC,规定某个阈值,当像素值超过这个阈值的时候取这个像素值和阈值相等;当像素值小于这个值的时候不变。
  4. 阈值取零(threshold zero)THRESH_TOZERO,规定某个阈值,当像素值大于这个阈值的时候,像素值保持不变;当像素值小于这个值的时候为0。
  5. 阈值反取零(threshold to zero inverted)THRESH_TOZERO_INV,规定某个阈值,当像素值大于这个阈值的时候为0;当像素值小于这个值的时候,像素值保持不变。

寻找阈值方法

OpenCV中提供了两种寻找最佳阈值的方法:THRESH_OTSUTHRESH_TRIANGLE(不支持32位)作为优化算法配合上面提到的5种阈值方法来使用的。当使用了这两个标志时,输入图像必须为单通道。

threshold(gray_src, dst, threshold_value, threshold_max, THRESH_BINARY);

gray_src表示输入的灰度图像;dst表示输出图像;threshold_value表示设定阈值;threshold_max表示设定的输出图像中的最大像素值;THRESH_BINARY表示阈值类型(0:二值化;1:反二值化;2:截断;3:取零;4:反取零)

#include
#include
#include

using namespace cv;
using namespace std;

Mat src, dst, gray_src;
int threshold_value = 127;
int threshold_max = 255;
const char* output_title = "binary image";
int type_value = 2;
int type_max = 4;

void Threshold_Demo(int, void*);

int main(int argc, char** argv) {
     
	src = imread("C:/Users/覃忠原/Desktop/OpenCV图片/test.jpg");
	if (src.empty()) {
     
		cout << "无法打开图像..." << endl;
		return -1;
	}

	imshow("原图", src);

	namedWindow("阈值二值化", WINDOW_AUTOSIZE);

	createTrackbar("阈值拖动", "阈值二值化", &threshold_value, threshold_max, Threshold_Demo);
	createTrackbar("阈值类型", "阈值二值化", &type_value, type_max, Threshold_Demo);
	Threshold_Demo(0, 0);

	waitKey(0);
	return 0;
}

void Threshold_Demo(int, void*) {
     
	cvtColor(src, gray_src, COLOR_BGR2GRAY);

	//阈值调节(输入图像,输出图像,阈值,最大值,阈值类型)
	threshold(gray_src, dst, threshold_value, threshold_max, type_value);
	imshow("阈值二值化", dst);

	return;
}

阈值127,阈值类型2(阈值截断)的输出结果如下:

你可能感兴趣的:(opencv,计算机视觉,算法)