opencv自适应阈值
2017-05-30 23:11
246 查看
在图像阈值化操作中,我们更关心的是从二值化图像中分离目标区域背景区域,仅仅通过设定固定阈值很难达到理想的分割效果。在实践应用中,目标及背景区域通常相互依存在图像块中,我们可以通过图像像素领域快的分布特征来自适应确定阈值的二值化阈值。对于图像块中亮度变化明显的区域,自适应阈值通常会设置的比较大或者比较小,进而保证图像中各个像素的阈值会随着周围领域的变化而变化。
opencv中提供了自适应阈值化函数adaptiveThreshold,该函数有两种自适应阈值化类型参数可供选择,用来对当前像素点与领域像素块进行阈值计算。
void adaptiveThreshold(InoutArray src, OutputArray dst, double maxVal, int adaptiveMethod, int thresholdType, int blockSize, double C)
实现图像的自适应阈值化操作。参数src表示源图像数组(单通道8位图像)。参数dst表示输出图像组(与输入图像同样的尺寸和类型)。参数maxVal表示预示满足条件的最大值。参数adaptiveMethod表示自适应阈值算法选择ADAPTIVE_THRESHOLD_MEAN_C或者ADAPTIVE_THRESHOLD_GAUSSIAN_C。参数thresholdType表示阈值类型THRESHOLD_BINARY和THRESHOLD_BINARY_INV。参数blockSize表示领域块的大小,用来计算区域阈值,一般选择3、5、7............。参数C表示常数,它是一个从均值或者加权均值提取的常数,可以是负数。
代码如下:
opencv中提供了自适应阈值化函数adaptiveThreshold,该函数有两种自适应阈值化类型参数可供选择,用来对当前像素点与领域像素块进行阈值计算。
void adaptiveThreshold(InoutArray src, OutputArray dst, double maxVal, int adaptiveMethod, int thresholdType, int blockSize, double C)
实现图像的自适应阈值化操作。参数src表示源图像数组(单通道8位图像)。参数dst表示输出图像组(与输入图像同样的尺寸和类型)。参数maxVal表示预示满足条件的最大值。参数adaptiveMethod表示自适应阈值算法选择ADAPTIVE_THRESHOLD_MEAN_C或者ADAPTIVE_THRESHOLD_GAUSSIAN_C。参数thresholdType表示阈值类型THRESHOLD_BINARY和THRESHOLD_BINARY_INV。参数blockSize表示领域块的大小,用来计算区域阈值,一般选择3、5、7............。参数C表示常数,它是一个从均值或者加权均值提取的常数,可以是负数。
代码如下:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include <stdio.h>
#include <string>
using namespace std;
using namespace cv;
int main()
{
cv::Mat srcImage = cv::imread("C:\\Users\\LP\\Desktop\\C++\\ConsoleApplication4\\ConsoleApplication4\\RGBFlower4.jpg");
if (srcImage.empty())
{
return -1;
}
cv::imshow("原图像", srcImage);
//灰度转换
cv::Mat srcGray;
cv::cvtColor(srcImage, srcGray, CV_RGB2GRAY);
cv::imshow("srcGray", srcGray);
cv::Mat dstImage;
//初始化自适应阈值参数
int blockSize = 5;
int constValue = 20;
int maxValue = 255;
//自适应阈值算法0:ADAPTIVE_THRESHOLD_MEAN_C,1:ADAPTIVE_GAUSSIAN_MEAN_C
//阈值类型,0:THRESHOLD_BINARY,1:THRESHOLD_BINARY_INV
int adaptiveMthod = 0;
int thresholdType = 1;
//图像自适应阈值操作
cv::adaptiveThreshold(srcGray, dstImage, maxValue, adaptiveMthod, thresholdType, blockSize, constValue);
cv::imshow("dstImage", dstImage);
cv::waitKey(0);
//预设最大值
const int maxVal = 255;
return 0;
}
相关文章推荐
- 有关opencv的学习(14)—使用自适应阈值处理图像
- OpenCV2.x自学笔记——自适应阈值
- 在OpenCV中自适应确定canny算法的分割阈值
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- opencv学习——自适应阈值二值化
- 【转】在OpenCV中自适应确定canny算法的分割阈值
- 在OpenCV中自适应确定canny算法的分割阈值
- OpenCV基于局部自适应阈值的图像二值化
- python-opencv 图像二值化,自适应阈值处理
- OpenCV_基于局部自适应阈值的图像二值化
- opencv函数系列--自适应阈值
- Opencv图像识别从零到精通(15)-----阈值分割、固定阈值Threshold、自适应阈值分割adaptiveThreshold、OSTU大津法
- opencv for python (11) 图像阈值 及自适应阈值
- OpenCV自适应阈值
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- 初学opencv-单一阈值与自适应阈值
- OpenCV_基于局部自适应阈值的图像二值化
- Opencv step by step - 自适应阈值
- opencv 学习之 阈值化<2> 自适应阈值
- Opencv step by step - 自适应阈值