OpenCV学习之采用金字塔方法进行图像分割

//采用金字塔方法进行图像分割
#include "highgui.h"  
#include"cv.h"  
#include <opencv2/legacy/legacy.hpp>
void  doPyrSegmentation(IplImage * src, IplImage * dst
) {
    assert(src->width % 2 == 0 && src->height % 2 == 0);

    CvMemStorage * stoage = cvCreateMemStorage(0);
    CvSeq* comp = NULL;

    int level = 2;   //进行n层采样  
    double threshold1 = 150;
    double threshold2 = 30;
    cvPyrSegmentation(src, dst, stoage, &comp, level, threshold1, threshold2);
};
int main(int argc, char ** argv)
{
    IplImage * src = cvLoadImage("Lena.tiff",1);

    IplImage * dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);

    doPyrSegmentation(src, dst);
    cvNamedWindow("src");
    cvNamedWindow("dst");
    cvShowImage("src", src);
    cvShowImage("dst", dst);
    cvWaitKey(0);
    cvDestroyAllWindows();
    return 0;
}
Storage: 存储连通部件的序列结果
    comp
    分割部件的输出序列指针 components.
    level
    建立金字塔的最大层数
    threshold1
    建立连接的错误阈值
    threshold2
    分割簇的错误阈值
    函数 cvPyrSegmentation 实现了金字塔方法的图像分割。金字塔建立到 level 指定的最大层数。如果 p(c(a), c(b))<threshold1, 则在层 i 的象素点 a 和它的相邻层的父亲象素 b 之间的连接被建立起来,

    定义好连接部件后,它们被加入到某些簇中。如果p(c(A), c(B))<threshold2,则任何两个分割 A 和 B 属于同一簇。

    如果输入图像只有一个通道,那么

    p(c1, c2) = | c1 - c2 | .
    如果输入图像有单个通道(红、绿、兰),那幺

    p(c1, c2) = 0, 3·(c1r - c2r) + 0, 59·(c1g - c2g) + 0, 11·(c1b - c2b) .
    每一个簇可以有多个连接部件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值