阈值处理

自适应阈值是通过在每个像素点设置周围b*b的区域加权平均然后减去一个常数得到一个阈值,然后进行一些阈值处理,如二值化,截断等。这种阈值处理的方法对有很强照明梯度(光照不均)的图像具有很好的处理效果

// Threshold.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <cv.h>
#include <highgui.h>

void main()
{

	//以原始通道数读取图片1
	IplImage* img1 = cvLoadImage("D://vc6.0//MSDev98//MyProjects//MachineVision//TestPic//PeppersRGB.bmp",CV_LOAD_IMAGE_UNCHANGED);

	//创建rgb三通道分量
	IplImage* r = cvCreateImage(cvGetSize(img1), IPL_DEPTH_8U, 1);
	IplImage* g = cvCreateImage(cvGetSize(img1), IPL_DEPTH_8U, 1);
	IplImage* b = cvCreateImage(cvGetSize(img1), IPL_DEPTH_8U, 1);

	//将图像的三个通道分配到rgb三个子图中
	cvSplit(img1, r, g, b, NULL);

	//临时存储空间
	IplImage* s = cvCreateImage(cvGetSize(img1), IPL_DEPTH_8U, 1);
	IplImage* s2 = cvCreateImage(cvGetSize(img1), IPL_DEPTH_8U, 1);
	//将3个通道的子图进行加权叠加
	cvAddWeighted(r, 1./3, g, 2./3, 0.0, s);
	cvAddWeighted(s, 1./3, b, 2./3, 0.0, s);

	//设定阈值为灰度100
	cvThreshold(s, s2, 100, 255, CV_THRESH_BINARY);

	cvAdaptiveThreshold(s, s, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);
	//命名窗口
	cvNamedWindow("Origin", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("Threshold", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("AdaptiveThreshold", CV_WINDOW_AUTOSIZE);	

	//显示图片
	cvShowImage("Origin", img1);
	cvShowImage("Threshold", s2);
	cvShowImage("AdaptiveThreshold", s);
	cvWaitKey(0);

	cvReleaseImage(&img1);
	cvReleaseImage(&r);
	cvReleaseImage(&g);
	cvReleaseImage(&b);

	cvDestroyAllWindows();

}

阈值处理

时间: 2024-11-01 12:21:30

阈值处理的相关文章

Python下opencv使用笔记(四)(图像的阈值处理)

图像的阈值处理一般使得图像的像素值更单一.图像更简单.阈值可以分为全局性质的阈值,也可以分为局部性质的阈值,可以是单阈值的也可以是多阈值的.当然阈值越多是越复杂的.下面将介绍opencv下的三种阈值方法. (一)简单阈值 简单阈值当然是最简单,选取一个全局阈值,然后就把整幅图像分成了非黑即白的二值图像了.函数为cv2.threshold() 这个函数有四个参数,第一个原图像,第二个进行分类的阈值,第三个是高于(低于)阈值时赋予的新值,第四个是一个方法选择参数,常用的有: ? cv2.THRESH

OpenCV2.x自学笔记——固定阈值

threshold( const CvArr* src,  CvArr* dst,  double threshold,  double max_value,  int threshold_type); 第三个参数表示阈值 第四个参数表示最大值. 第五个参数表示运算方法. CV_THRESH_BINARY         =0 CV_THRESH_BINARY_INV   =1 CV_THRESH_TRUNC          =2 CV_THRESH_TOZERO         =3 CV_

借助过度区选择阈值

主要思想:       借助图像的有效平均梯度(EAG)的计算以及图像灰度的剪切操作来确定边缘的灰度值. 有效平均梯度(EAG):计算非0值梯度 剪切操作:设有一个阈值L ,灰度大于L的为原值,小于L的为L.或者,小于L的为L,大于L的为原值. (个人感觉这个方法不靠谱,有待未来实践证实) 来自为知笔记(Wiz) 借助过度区选择阈值,布布扣,bubuko.com

多分辨路阈值选取

主要思路:       一种通过直方图找波峰波谷的方法来确定出阈值:通过低分辨率较大尺度检测出真正的波峰波谷的位置,通过高分辨率小尺度检测出波峰波谷的精确位置. 1.确定分割区域的类数(确定最低的分辨率) 2.确定最优阈值 跟踪在最低分辨率一层选取的所有阈值,选取相应的最高分辨率一层的对应阈值. 来自为知笔记(Wiz) 多分辨路阈值选取,布布扣,bubuko.com

OpenCV的阈值化函数threshold

在OpenCV中,threshold用来进行对图像(二维数组)的二值化阈值处理 通过查找OpenCV在线文档,发现存在很多函数: 其函数原型如下: 1. C版本的:函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold,double max_value, int threshold_type ); src,dst: 不必多说,其要求类型一致性: threshold:需要设置的阈值,当像素值大于某个数字时,设定一

Linux 添加swap分区, 设定swap阈值

swap阈值设定 1, 查看当前系统swap阈值 [email protected]~$  cat /proc/sys/vm/swappiness 60 内存在使用到100-60=40%的时候,就开始出现有交换分区的使用 swappiness=0表示最大限度使用物理内存,然后才使用swap空间, swappiness=100表示积极使用swap分区,并且把内存上的数据及时的搬运到swap空间里面 2, 永久设定 [email protected]~$ sudo -s [[email protec

Halcon阈值化算子dual_threshold和var_threshold的理解

Halcon中阈值二值化的算子众多,通常用得最多的有threshold.binary_threshold.dyn_threshold等. threshold是最简单的阈值分割算子,理解最为简单:binary_threshold是自动阈值算子,它可以自动选出暗(dark)的区域,或者自动选出亮(light)的区域,理解起来也没有难度. 动态阈值算子dyn_threshold理解起来稍微复杂一点,使用dyn_threshold算子的步骤基本是这样的: ① 将原图进行滤波模糊处理. ② 用原图和模糊后

Emgu学习之(四)——图像阈值

Visual Studio Community 2015 工程和代码:http://pan.baidu.com/s/1o7lxYSM 内容 在这篇文章中将提到以下内容: 全局阈值 自适应阈值 Otsu's二值化 在图像处理中,会希望忽略掉一些灰度细节,只保留主体的轮廓,对灰度图像进行阈值化处理能达到这个目的. “其基本的思想是,给定一个数组和一个阈值,然后根据数组中的每个元素的值是低于还是高于阈值而进行一些处理”——<学习OpenCV(中文版)>,这里说的“数组”即为图像数据, 而“进行一些处

sharepoint查询超出阈值

昨天客户出了webpart显示数据不稳定的bug,经过这两天的艰苦排查终于发现了是列表视图阈值造成的问题,经过在网上搜索终于找到了类似的解决方法. SPQuery query = new SPQuery(); //query.QueryThrottleMode = SPQueryThrottleOption.Strict; //普通权限,查询受列表阈值限制  //query.QueryThrottleMode = SPQueryThrottleOption.Override;//管理员权限,查询

阈值分割之迭代选择阈值法

function [Ibw, thres] = autoThreshold(I) % 迭代法自动阈值分割 % % 输入:I - 要进行自动阈值分割的灰度图像 % 输出:Ibw - 分割后的二值图像 % thres - 自动分割采用的阈值 thres = 0.5 * (double(min(I(:))) + double(max(I(:)))); %初始阈值 done = false; %结束标志 while ~done g = I >= thres; Tnext = 0.5 * (mean(I(