图像的二值化
图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。
下面我们来介绍两种二值化的方法
1.threshold
首先,我们先来学习一个新函数——threshold(中文翻译为临界值,实际上也就是阈值函数)
函数原型doublethreshold(InputArraysrc,OutputArraydst,double threshold,double maxval,inttype );
参数说明
src:原始数组,可以是Mat类型。
dst:输出数组,必须与 src 的类型一致。
threshold:阈值
maxval:使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值。
type:阈值类型
type=CV_THRESH_BINARY:如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0;
type=CV_THRESH_BINARY_INV:如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value.
type=CV_THRESH_TRUNC:如果 src(x,y)>threshold,dst(x,y) = max_value; 否则dst(x,y) = src(x,y).
type=CV_THRESH_TOZERO:如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否则 dst(x,y) = 0。
type=CV_THRESH_TOZERO_INV:如果 src(x,y)>threshold,dst(x,y) = 0 ; 否则dst(x,y) = src(x,y).
代码实例
#include"stdafx.h"
#include"opencv2/imgproc/imgproc.hpp"
#include"opencv2/highgui/highgui.hpp"
#include
usingnamespacecv;
usingnamespacestd;
voidmain()
{
//定义变量
Matimg;
Matresult;
//载入图片
img = imread("E:\\6.jpg",0);
// 转为二值图
threshold(img, result, 170, 255,CV_THRESH_BINARY);
//显示原图
namedWindow("Image");
imshow("Image", img);
// 显示二值图
namedWindow("二值化后的图