美文网首页OpenCV for Object-c
openCV常用函数(三)

openCV常用函数(三)

作者: 做设计的iOS开发 | 来源:发表于2018-06-29 20:05 被阅读0次

    阈值函数

    /**

     @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常用函数(三)

        本文链接:https://www.haomeiwen.com/subject/zeqzyftx.html