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

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容