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);
}

在这里插入图片描述

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您讲解一下 OpenCV 中的阈值处理阈值处理是一种图像处理方法,通过将图像中的像素值与一个特定的阈值进行比较,并根据比较结果对像素值进行修改。在 OpenCV 中,有两种常用的阈值处理方法:全局阈值和自适应阈值。 1. 全局阈值 全局阈值是指对整个图像应用一个固定的阈值。在 OpenCV 中,可以使用 cv2.threshold() 函数来实现全局阈值处理。该函数的参数包括输入图像、阈值、最大像素值和阈值处理类型等。 例如,以下代码将图像中所有像素值大于 127 的像素设为白色(255),其余像素设为黑色(0): ``` import cv2 img = cv2.imread('image.jpg', 0) ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imshow('Thresholded Image', thresh) cv2.waitKey(0) ``` 2. 自适应阈值 自适应阈值是指对不同区域使用不同的阈值,可以更好地处理光线不均匀的图像。在 OpenCV 中,可以使用 cv2.adaptiveThreshold() 函数来实现自适应阈值处理。该函数的参数包括输入图像、最大像素值、自适应方法、阈值类型、块大小和常数等。 例如,以下代码将图像进行自适应阈值处理: ``` import cv2 img = cv2.imread('image.jpg', 0) thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2) cv2.imshow('Adaptive Thresholded Image', thresh) cv2.waitKey(0) ``` 以上就是 OpenCV阈值处理的简单介绍,希望能够帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值