码迷,mamicode.com
首页 > 其他好文 > 详细

阈值处理

时间:2014-08-20 14:09:42      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:阈值处理   二值化   图像处理   opencv   

自适应阈值是通过在每个像素点设置周围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();
	
}

bubuko.com,布布扣bubuko.com,布布扣

bubuko.com,布布扣

阈值处理,布布扣,bubuko.com

阈值处理

标签:阈值处理   二值化   图像处理   opencv   

原文地址:http://blog.csdn.net/lampqiu/article/details/38704865

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!