opencv分水岭算法源码难点解释

这篇博客深入解析了OpenCV库中分水岭算法的实现难点,包括如何将点push到队列以及pop出队列的操作。虽然算法原理不在本文讨论范围内,但作者通过图像展示了push和pop的过程,帮助理解算法细节。遗憾的是,插入的图片出现自动旋转问题,作者期待找到解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客主要解释opencv中分水岭算法源码中的难点:1)将点push到队列中;2)将点pop出队列。有关分水岭算法原理网上有很多解释,请自行查阅,这里不解释。

下面三张图就是push和pop过程演示(不知道为何图片插进来就自动旋转了,尴尬疑问,如果人懂,望一定告知解决方法,谢谢)

下面是opencv中分水岭算法源码:

void cv::watershed( InputArray _src, InputOutputArray _markers )
{
    CV_INSTRUMENT_REGION()

    // Labels for pixels
    const int IN_QUEUE = -2; // Pixel visited
    const int WSHED = -1; // Pixel belongs to watershed

    // possible bit values = 2^8
    const int NQ = 256;

    Mat src = _src.getMat(), dst = _markers.getMat();
    Size size = src.size();

    // Vector of every created node
    std::vector<WSNode> storage;
    int free_node = 0, node;
    // Priority queue of queues of nodes
    // from high priority (0) to low priority (255)
    WSQueue q[NQ];
    // Non-empty queue with highest priority
    int active_queue;
    int i, j;
    // Color differences
    int db, dg, dr;
    int subs_tab[513];

    // MAX(a,b) = b + MAX(a-b,0)
    #define ws_max(a,b) ((b) + subs_tab[(a)-(b)+NQ])
    // MIN(a,b) = a - MAX(a-b,0)
    #define ws_min(a,b) ((a) - subs_tab[(a)-(b)+NQ])

    // Create a new node with offsets mofs and iofs in queue idx
    #define ws_push(idx,mofs,iofs)          \
    {                                       \
        i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值