iOS_OpenCV图像阈值化 (1)
2018-06-28 本文已影响109人
Champion
图像阈值化的思想是:给定一个数组或者阈值,然后根据数组中的每个元素的值是高于还是低于阈值而进行一些处理。
1、固定阈值操作
CV_EXPORTS_W 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,阈值类型:
type.png
2、自适应阈值操作
CV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,
double maxValue, int adaptiveMethod,
int thresholdType, int blockSize, double C );
*第一个参数,InputArray类型的src,源图像,8位单通道浮点型图像
*第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型
*第三个参数,double类型的maxValue,给像素赋的满足条件的非零值
*第四个参数,int类型的adaptiveMethod,用于指定要使用的自适应阈值算法,可取值CV_ADAPTIVE_THRESH_MEAN_C或CV_ADAPTIVE_THRESH_GAUSSIAN_C
*第五个参数,int类型的thresholdType,阈值类型。取值必须是CV_THRESH_BINARY或CV_THRESH_BINARY_INV
*第六个参数,int类型的blockSize,用于计算阈值大小的一个像素的邻域尺寸,取值3、5、7等
*第七个参数,double类型的C,减去平均或加权平均值后的常数值。通常为正数,也可为0或者负数
UIImage *image = [UIImage imageNamed:@"100.jpg"];
cv::Mat mask,srcImage,dstImage;
UIImageToMat(image, srcImage);
cv::cvtColor(srcImage, dstImage, CV_RGBA2GRAY);
//cv::threshold(dstImage, mask, 150, 255, cv::THRESH_BINARY);
cv::adaptiveThreshold(dstImage, mask, 200, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 2);
UIImageView *imageView3 = [[UIImageView alloc] initWithFrame:CGRectMake(35.f, 100.f, image.size.width, image.size.height)];
imageView3.image = MatToUIImage(mask);
[self.view addSubview:imageView3];
固定阈值.jpeg
自适应阈值.jpeg