openCV常用函数(三)

阈值函数

/**

 @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);

}


你可能感兴趣的:(openCV常用函数(三))