本文共 3116 字,大约阅读时间需要 10 分钟。
threshold是固定阈值,就是根据这个点的像素值把它装换成对于的值
adaptiveThreshold是自适应阈值,它可以根据周围点的像素值来对于调整这个点的像素值 面对阈值化时最好做Trackbar来看一下效果
threshold(src_gray, dst, threshold_value, max_BINARY_value,threshold_type );//src_gray: 输入的灰度图像的地址。//dst: 输出图像的地址。//threshold_value: 进行阈值操作时阈值的大小。//max_BINARY_value: 设定的最大灰度值(该参数运用在二进制与反二进制阈值操作中)。//threshold_type: 阈值的类型。从下面提到的5种中选择出的结果。
threshold_type类型:
Mat srcImg = imread("E:\\OpenCV\\images\\lf.jpg",0);Mat dstImg;threshold(srcImg, dstImg, 100, 255, THRESH_BINARY);imshow("dst", dstImg);imshow("img", srcImg);waitKey(0);
void adaptiveThreshold( InputArray src, OutputArray dst, double maxValue, int adaptiveMethod,int thresholdType, int blockSize, double C );参数1:InputArray类型的src,输入图像,填单通道,单8位浮点类型Mat即可。参数2:函数运算后的结果存放在这。即为输出图像(与输入图像同样的尺寸和类型)。参数3:预设满足条件的最大值。参数4:指定自适应阈值算法。可选择ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C两种。ADAPTIVE_THRESH_MEAN_C,为局部邻域块的平均值。该算法是先求出块中的均值,再减去常数C。ADAPTIVE_THRESH_GAUSSIAN_C ,为局部邻域块的高斯加权和。该算法是在区域中(x,y)周围的像素根据高斯函数按照他们离中心点的距离进行加权计算, 再减去常数C。参数5:指定阈值类型。可选择THRESH_BINARY或者THRESH_BINARY_INV两种。(即二进制阈值或反二进制阈值)。参数6:表示邻域块大小,用来计算区域阈值,一般选择为3、5、7......等。参数7:参数C表示与算法有关的参数,它是一个从均值或加权均值提取的常数,可以是负数。
Mat srcImg = imread("E:\\OpenCV\\images\\lf.jpg",0); Mat dstImg; adaptiveThreshold(srcImg, dstImg, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 3,0); imshow("dst", dstImg); imshow("img", srcImg); waitKey(0);
#include "opencv2/opencv.hpp"using namespace cv;Mat srcImg, dstImg;Mat dstImg2;int thres_min = 20;int block_size = 3;int C0 = 3;void OnThreshold(int, void* ){ threshold(srcImg, dstImg, thres_min, 255, CV_THRESH_BINARY); imshow("src", srcImg); imshow("固定阈值", dstImg);} void OnAdaptiveThreshold(int, void* ){ if(block_size % 2==0) //如果block_size是偶数 block_size++; adaptiveThreshold(srcImg, dstImg2, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY_INV, block_size, C0); imshow("自适应阈值", dstImg2);}void main(){ srcImg = imread("0.bmp", 0); //以灰度模式读取 medianBlur(srcImg, srcImg, 5); namedWindow("固定阈值", CV_WINDOW_AUTOSIZE); namedWindow("自适应阈值", CV_WINDOW_AUTOSIZE); //cvtColor(srcImg, dstImg, CV_BGR2GRAY); //threshold(srcImg, dstImg, 100, 255, CV_THRESH_BINARY); //threshold(srcImg, dstImg, 100, 255, CV_THRESH_BINARY_INV); //threshold(srcImg, dstImg, 100, 255, CV_THRESH_TRUNC); //threshold(srcImg, dstImg, 100, 255, CV_THRESH_TOZERO); //threshold(srcImg, dstImg, 100, 255, CV_THRESH_TOZERO_INV); //adaptiveThreshold(srcImg, dstImg, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 11, 5); //adaptiveThreshold(srcImg, dstImg, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 11, 5); createTrackbar("Threshold", "固定阈值", &thres_min, 255, OnThreshold, 0); createTrackbar("Block_Size", "自适应阈值", &block_size, 255,OnAdaptiveThreshold, 0); createTrackbar("C", "自适应阈值", &C0, 255, OnAdaptiveThreshold, 0); OnThreshold(thres_min, 0); //回调函数初始化 OnAdaptiveThreshold(block_size, 0); OnAdaptiveThreshold(C0, 0); //imshow("src", srcImg); //imshow("dst", dstImg); waitKey(0);}
转载地址:http://wumzi.baihongyu.com/