threshold函数是对于图像二值化的处理。
首先,二值化就是对于一个图像,确定一个像素值,把大于这个像素的所有像素点处理成一个数值,小于它的也确定成一个数值。
threshold就是这么一个函数,它包含了5个参数
threshold(img, gray_binary, 125, 233, THRESH_BINARY_INV);
这里是书上给的用法,但是属实是有些生涩难懂。这里给出我的理解
第一个参数:原始图片
第二个参数:处理后的图片
第三个参数:设定的像素阈值
第四个参数:要处理成的最大值
第五个参数:处理类型。
其中,第五个参数(处理类型)分为图中图所示,翻译以下:
THRESH_BINARY//大于它的变成第四个参数设置的最大值,小于它的变成最小值(0) THRESH_BINARY_INV//大于它的变成最小值,小于它的变成最大值 THRESH_TRUNC//大于它的变成阈值,小于它的不变 THRESH_TOZERO//大于它的变为0,小于它的不变 THRESH_TOZERO_INV//小于它的变为0,大于它的不变 //其中,inv类似于取反,所有第一个和第二个,第四个和第五个,就是相反的操作。
更加简明的话,如图所示叭:
#include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> using namespace std; using namespace cv; int main(int argc,char** argv) { Mat img = imread("1.jpg"); Mat gray_binary; //灰度图像二值化 //THRESH_BINARY_INV--灰度大于阈值125则设为0, 其他值为最大 threshold(img, gray_binary, 125, 233, THRESH_BINARY_INV);//最大设为233 imshow("【原始图】", img); imshow("【效果图】", gray_binary);//grar_binary为二值化后图片 waitKey(0); return 0; }
最终效果: