首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在opencv C++中访问特定的超像素

如何在opencv C++中访问特定的超像素
EN

Stack Overflow用户
提问于 2017-03-28 05:00:19
回答 1查看 1.5K关注 0票数 0

我正在使用opencv中的超像素在C++中写一个程序,我真的需要能够访问特定的像素(特别是,迭代通过图像中的每个超像素),我正在使用opencv2/ximgproc.hpp额外模块中内置的超像素分割。

下面是与超像素分割相关的代码摘录:

代码语言:javascript
复制
/* preceding code */

int num_iterations = 6;
int prior = 2;
bool double_step = false;
int num_superpixels = 200;
int num_levels = 4;
int num_histogram_bins = 5;

bool init = false;

Mat result, mask;
Ptr<SuperpixelSEEDS> seeds;
int display_mode = 0;

/* Unrelated code... */
while(true) // Feed in video data
{
    if(!init)
    {
        seeds = createSuperpixelSEEDS(frame.size().width, frame.size().height, frame.channels(), num_superpixels, num_levels, prior, num_histogram_bins, double_step);
        init = true;
    }

    seeds->iterate(frame,num_iterations);
    seeds->getLabelContourMask(mask,false);

    /* More unrelated code... */

    Mat labels;
    seeds->getLabels(labels);

    /* End of superpixel code */
}

文档对我一点帮助都没有,我真的需要具体地访问每个超像素,最好是通过某种标签。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2017-03-28 17:06:28

使用getLabels可以获得CV_32SC1 (Mat_<int>)图像,其中属于同一超像素的像素具有相同的值。标签在[0, getNumberOfSuperpixels()].范围内

因此,您可以轻松地访问每个超像素,对标签值进行迭代,并创建相应的蒙版:

代码语言:javascript
复制
//...
Mat labels;
seeds->getLabels(labels);

int N = seeds->getNumberOfSuperpixels();
for(int i=0; i<N; ++i) 
{
    Mat1b mask_for_ith_sp = (labels == i);

    // Now you have the mask of the i-th superpixel.
    // You can do whatever you want with it.
    //...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43056410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档