OpenCV学习笔记(16)图像的二值化

xiaoxiao2021-02-28  140

      图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。与边缘检测相比,轮廓检测有时能更好的反映图像的内容,而要对图像进行轮廓检测,则必须要先对图像进行二值化,在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。

      threshold 方法是通过遍历灰度图中点,将图像信息二值化,处理过后的图片只有二种色值。

其函数原型如下:

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

参数信息: 第一个参数,InputArray类型的src,输入数组,填单通道 , 8或32位浮点类型的Mat即可。 第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型。 第三个参数,double类型的thresh,阈值的具体值。 第四个参数,double类型的maxval,当第五个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值. 第五个参数,int类型的type,阈值类型,。 其它参数很好理解,我们来看看第五个参数,第五参数有以下几种类型 0: THRESH_BINARY  当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0 1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval 2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变 3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0 4: THRESH_TOZERO_INV  当前点值大于阈值时,设置为0,否则不改变 官方解释如下图:

示例程序:

#include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include"opencv2/imgproc/imgproc.hpp" #include <iostream> using namespace cv; Mat SrcImage; Mat GrayImage; Mat BinaryImage; void on_trackbar(int pos,void*) { //转化为二值图 threshold(GrayImage, BinaryImage, pos, 255, CV_THRESH_BINARY); namedWindow("二值图"); imshow("二值图", BinaryImage); } void to_GrayImage() { //创建与原图同类型和同大小的矩阵 GrayImage.create(SrcImage.size(), SrcImage.type()); //将原图转换为灰度图像 cvtColor(SrcImage, GrayImage, CV_BGR2GRAY); namedWindow("灰度图"); imshow("灰度图", GrayImage); } void creat_trackbar() { int nThreshold = 0; createTrackbar("二值图阈值", "二值图", &nThreshold, 254, on_trackbar); } int main() { SrcImage = imread("102.jpg"); namedWindow("原图"); imshow("原图", SrcImage); to_GrayImage(); on_trackbar(1, 0); creat_trackbar(); waitKey(); }

转载请注明原文地址: https://www.6miu.com/read-36100.html

最新回复(0)