阈值函数
/**
@paraminputimage 输入图片
@paramthresh 门限值
@parammaxval 最大值
@paramtype 函数类
@return 返回图片
*/
+(UIImage*)opencvThreshold:(UIImage*)inputimage thresh:(double)thresh maxval:(double)maxval type:(int)type{
//转成 Mat 对像
MatimagrSrc;
UIImageToMat(inputimage, imagrSrc);
//阈值 需要把图片先转成灰度图 必须是灰度图
MatimagrGray;
cvtColor(imagrSrc, imagrGray,COLOR_BGR2GRAY);
MatthresholdImage;
/*
一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。
@param src input 必须单通道灰度图
@param dst
@param thresh 阈值
@param maxval 定义为255
types.
@param type cv::ThresholdTypes 类型
threshold( InputArray src, OutputArray dst,
double thresh, double maxval, int type )
*/
threshold(imagrGray, thresholdImage, thresh, maxval,CV_THRESH_BINARY_INV);
returnMatToUIImage(thresholdImage);
}
自适应阈值化
+(UIImage*)opencvAdaptiveThreshold:(UIImage*)inputimage{
//转成 Mat 对像
Mat imagrSrc;
UIImageToMat(inputimage, imagrSrc);
//阈值 需要把图片先转成灰度图
Mat imagrGray;
cvtColor(imagrSrc, imagrGray,COLOR_BGR2GRAY);
Mat thresholdImage;
/*
cv::adaptiveThreshold()支持两种自适应方法,即cv::ADAPTIVE_THRESH_MEAN_C(平均)和cv::ADAPTIVE_THRESH_GAUSSIAN_C(高斯)。在两种情况下,自适应阈值T(x, y)。通过计算每个像素周围bxb大小像素块的加权均值并减去常量C得到。其中,b由blockSize给出,大小必须为奇数;如果使用平均的方法,则所有像素周围的权值相同;如果使用高斯的方法,则(x,y)周围的像素的权值则根据其到中心点的距离通过高斯方程得到。
@param src 8位单通道图片 即灰度图片
@param dst 跟src 一样的大小一样通道.
@param maxValue 最大是255
@param adaptiveMethod cv::AdaptiveThresholdTypes
@param thresholdType 必须为THRESH_BINARY or THRESH_BINARY_INV, cv::ThresholdTypes.
@param blockSize 必须是奇数并且大于1
@param C 正数或者负数.
adaptiveThreshold(cv::InputArray src, cv::OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)
*/
adaptiveThreshold(imagrGray, thresholdImage, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 25, 10);
returnMatToUIImage(thresholdImage);
}
腐蚀
+(UIImage*)opencvErode:(UIImage*)inputimage width:(int)width height:(int)height{
//转成 Mat 对像
MatimagrSrc;
UIImageToMat(inputimage, imagrSrc);
if(width <2){
width =2;
height =2;
}
/*
getStructuringElement函数返回的是指定形状和尺寸的结构元素
@param shape 形状 cv::MorphShapes 矩形(包括线形)MORPH_RECT 、椭圆(包括圆形) MORPH_RECT 十字形 MORPH_CROSS
@param ksize 大小.width height 必须大于2
@param anchor 默认 Point(-1,-1)
Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
*/
Mat element = getStructuringElement(MORPH_RECT, Size2i(width, height),Point2i(1,1));
Matdst;
erode(imagrSrc, dst, element);//腐蚀操作
returnMatToUIImage(dst);
}
均值滤波
+(UIImage*)opencvblur:(UIImage*)inputimage size:(int)size{
//转成 Mat 对像
Mat imagrSrc;
UIImageToMat(inputimage, imagrSrc);
//做下转换,不然会漰溃
intvalue = size <1?3:size;
//输出图像
Mat dst;
/*
@param src 它可以有任意数量的通道 但是深度必须是 CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.
@param dst
@param ksize 定义滤波器的大小。如Size(3,3) 必须大于0
@param anchor 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点。可省略 默认 Point(-1,-1)
@param borderType 推断边缘像素,一般取默认值BORDER_DEFAULT 参见 cv::BorderTypes
@sa
blur(cv::InputArray src, cv::OutputArray dst, cv::Size ksize)
*/
blur(imagrSrc, dst,Size2i(value,value));
returnMatToUIImage(dst);
}