12 OpenCv阈值处理

Halcon阈值处理

halcon 阈值处理

概念

阈值又叫临界值,是指一个效应能够产生的最低值或最高值。实际上是基于图片亮度的一个黑白分界值,默认值是50%中性灰,即128,亮度高于128(<50%的灰)的会变白,低于128(>50%的灰)的会变黑。从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体)。这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。为了从一副图像中提取出我们需要的部分,应该用图像中的每一个像素点的灰度值与选取的阈值进行比较,并作出相应的判断。(注意:阈值的选取依赖于具体的问题。即:物体在不同的图像中有可能会有不同的灰度值)。
在这里插入图片描述

阈值二值化

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
在这里插入图片描述

阈值反二值化

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
在这里插入图片描述

截断

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
在这里插入图片描述

阈值取零

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
在这里插入图片描述

阈值反取零

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
在这里插入图片描述

算子

double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );
/*******************************************************************
*			src: 					输入图像
*			dst:					输出图像
*			thresh:					阈值的具体值
*			maxval:				 	 阈值的最大值
*			type:				 	 阈值操作类型
*********************************************************************/
//阈值操作类型
enum ThresholdTypes {
    THRESH_BINARY     = 0, 		//二进制
    THRESH_BINARY_INV = 1, 		//反二进制
    THRESH_TRUNC      = 2, 		//截断
    THRESH_TOZERO     = 3, 		//阈值化为0
    THRESH_TOZERO_INV = 4, 		//反阈值化为0
    THRESH_MASK       = 7,		//自适应阈值
    THRESH_OTSU       = 8,		//利用最大类间方差法(OTSU)求出对图像进行二值化处理的最佳阈值
    THRESH_TRIANGLE   = 16 		//三角算法选择最优阈值  
};

示例

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

Mat src, gray_src, dst;
int threshold_value = 127;
int threshold_max = 255;
int type_value = 2;
int type_max = 4;
const char* output_title = "binary image";
void Threshold_Demo(int, void*);
int main()
{
	src = imread("test.jpg");//读取图片
	if (src.empty())
	{
		cout << "could not load img...";
		return -1;
	}
	namedWindow(output_title);//设置窗口名称
	imshow(output_title, src);
	
	createTrackbar("Threshold Value:", output_title, &threshold_value, threshold_max, Threshold_Demo);
	createTrackbar("Type Value:", output_title, &type_value, type_max, Threshold_Demo);
	Threshold_Demo(0,0);
	//threshold(src, dst, 0, 188, 1);
	//imshow(output_title, dst);
	waitKey(0);
	return 0;
}
void Threshold_Demo(int, void*)
{
	//cvtColor(src, gray_src, COLOR_BGR2GRAY);
	threshold(src, dst, threshold_value, threshold_max, THRESH_BINARY| type_value);
	imshow(output_title, dst);
}

在这里插入图片描述

相关推荐

  1. OpenCV 阈值

    2024-03-11 13:06:03       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 13:06:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 13:06:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 13:06:03       87 阅读
  4. Python语言-面向对象

    2024-03-11 13:06:03       96 阅读

热门阅读

  1. Linux开发的常用桌面界面有哪些?以及使用推荐

    2024-03-11 13:06:03       38 阅读
  2. linux安全配置规范

    2024-03-11 13:06:03       34 阅读
  3. 【c++11线程库的使用】

    2024-03-11 13:06:03       28 阅读
  4. 数据结构-双链表

    2024-03-11 13:06:03       45 阅读
  5. 如何在vue中使用sort对数组进行排序

    2024-03-11 13:06:03       42 阅读
  6. TensorFlow是啥

    2024-03-11 13:06:03       40 阅读
  7. 2024 年 AI 辅助研发趋势

    2024-03-11 13:06:03       42 阅读