文章目录
- Halcon阈值处理
- 概念
- 阈值二值化
- 阈值反二值化
- 截断
- 阈值取零
- 阈值反取零
- 算子
- 示例
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, //阈值化为0THRESH_TOZERO_INV = 4, //反阈值化为0THRESH_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);
}