OpenCV--基本阈值操作

来源:互联网 发布:网络评论文章怎么写 编辑:程序博客网 时间:2024/05/06 02:20

阈值二值化(threshold binary)

这里写图片描述
蓝色线对应值为选定的阈值。所有像素值小于这一值的设定为0,否则设定为最大值1。


阈值反二值化(threshold binary inverted)

这里写图片描述
蓝色线对应值为选定的阈值。所有像素值小于这一值的设定为1,否则设定为最小值0。


截断(truncate)

这里写图片描述
像素值大于阈值的就设定为阈值大小,否则保持不变。


阈值取零(threshold to zero)

这里写图片描述
像素值小于阈值的全部设为0,大于的保持不变。


阈值反取零(threshold to zero inverted)

这里写图片描述
像素值大于阈值的全部设为0,小于的保持不变。


OpenCV提供的阈值操作

提供API:

double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)

实例代码:

#include "opencv2/opencv.hpp"#include "iostream"using namespace cv;using namespace std;int value = 127;//选定的阈值int maxValue = 255;//像素最大值int type=0;int maxType=4;char *outPut = "阈值化";Mat src,dest,gray;void CallBackFun2(int,void*);void ThresholdOper(){    src = imread("lena.jpg");    if(!src.data){        cout << "图像打开失败!" << endl;        return ;    }    namedWindow("原图",CV_WINDOW_AUTOSIZE);    imshow("原图",src);    namedWindow(outPut,CV_WINDOW_AUTOSIZE);    createTrackbar("value",outPut,&value,maxValue,CallBackFun2);    createTrackbar("type",outPut,&type,maxType,CallBackFun2);    CallBackFun2(0,0);    cvWaitKey();}void CallBackFun2(int,void*){    cvtColor(src,gray,CV_RGB2GRAY);    /*    double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)    thresh – 选定阈值.    maxval – maximum value to use with the THRESH_BINARY and THRESH_BINARY_INV thresholding types.    type            THRESH_BINARY            THRESH_BINARY_INV            THRESH_TRUNC            THRESH_TOZERO            THRESH_TOZERO_INV    */    threshold(gray,dest,value,maxValue,type);    imshow(outPut,dest);    return ;}int main(){    ThresholdOper();    return 0;}

这里写图片描述

对于阈值的选定我们可以自己指定也可以让程序自己计算,使用参数:THRESH_OTSU .

threshold(gray,dest,value,maxValue,THRESH_OTSU | type);

使用程序计算的阈值后即使我们拖动滑动条也无法改变阈值。

原创粉丝点击