Qt-OpenCV学习笔记--自适应阈值--adaptiveThreshold()

概述

adaptiveThreshold是threshold的进阶版本。threshold只是简单的把图像像素根据阈值区分,这样的二值区分比较粗糙。可能会导致图像的信息与特征完全无法提取,或者漏掉一些关键的信息。

自适应阈值处理的好处:

  • 每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。
  • 亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。
  • 不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值。

函数 


void cv::adaptiveThreshold
(
	InputArray 	src,
    OutputArray 	dst,
    double 	maxValue,
    int 	adaptiveMethod,
    int 	thresholdType,
    int 	blockSize,
    double 	C 
)
src 源图像
dst 输出图像
maxvalue 分配给满足条件的像素的非零值
adaptiveMethod

自适应阈值算法:

ADAPTIVE_THRESH_MEAN_C  (均值)

ADAPTIVE_THRESH_GAUSSIAN_C (高斯)

thresholdType

阈值类型:

THRESH_BINARY
THRESH_BINARY_INV

blockSize 用于计算像素阈值的像素邻域的大小:3、5、7等
c 从平均值或加权平均值中减去常数(通常,它是正的,但也可能是零或负的)

测试代码

#include "widget.h"
#include "ui_widget.h"

#include 

#include 
#include 
#include 

#include 

using namespace cv;
using namespace std;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //载入原始图像
    Mat mat0 = imread("c:/opencv/logo.jpg");
    //显示
    imshow("mat",mat0);

    //将图像转为灰度图
    Mat im_gray;
    cv::cvtColor(mat0,im_gray,COLOR_BGR2GRAY);
    imshow("im_gray",im_gray);

    //自适应阈值处理
    Mat mat_ada;
    cv::adaptiveThreshold(im_gray,mat_ada,255,ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,3,6);
    //显示
    imshow("mat_ada",mat_ada);

}

Widget::~Widget()
{
    delete ui;
}

测试结果

Qt-OpenCV学习笔记--自适应阈值--adaptiveThreshold()_第1张图片

通过改变 blockSize c 的数值,可以得到不同的处理效果:

  • blockSize 的数值越大,处理效果越粗糙;反之,越细腻。
  • c 的数值越大,噪音越少;反之,噪音越多。

参考 

adaptiveThreshold()讲解

OpenCV之自适应阈值操作:adaptiveThreshold()函数

opencv中自适应阈值(adaptiveThreshold()函数)介绍

CV2自适应阈值函数:adaptiveThreshold()

你可能感兴趣的:(opencv,学习,计算机视觉,qt)