首页 > 其他分享 >opencv超级像素示例

opencv超级像素示例

时间:2024-05-26 16:33:00浏览次数:15  
标签:slic img 示例 mask 像素 opencv seeds cv lsc

 

 

 

/*
 * createSuperpixelLSC(cv::InputArray img,int region_size,float ratio)
其中各个参数意义如下:
    image:输入图像
    region_size :平均超像素大小,默认10
    ratio:超像素紧凑度因子,默认0.075
*/
void superpixelLSC(const Mat& img)
{
    cv::Ptr<cv::ximgproc::SuperpixelLSC> lsc=cv::ximgproc::createSuperpixelLSC(img);
    lsc->iterate(10);
    Mat labels;
    lsc->enforceLabelConnectivity();
//    int numOfSuperpixels=lsc->getNumberOfSuperpixels();
//    cout<<"numOfSuperpixels="<<numOfSuperpixels<<endl;
    lsc->getLabels(labels);
    Mat mask_lsc;
    lsc->getLabelContourMask(mask_lsc);//获取像素分割边界映射图,该图与原图像一样尺寸
    Mat mask_inv_lsc;
    cv::bitwise_not(mask_lsc,mask_inv_lsc);//将分割边界映射图按位取反
    Mat imgSeg;
    cv::bitwise_and(img,img,imgSeg,mask_inv_lsc);//将边界映射图叠加到原图像上
    imshow(" segmentation",imgSeg);
}
/*
 * ximgproc::createSuperpixelSLIC(cv::inputArray image, int algorithm=SLICO, int region_size,float ruler    )
其中各个参数意义如下:
   image :输入图像
   algorithm:选择要使用的算法变体:SLIC、SLICO(默认)和MSLIC三种可选
   region_size:平均超像素大小,默认10
   ruler:超像素平滑度,默认10
*/
void superpixelSLIC(const Mat&img)
{
    //初始化slic项,超像素平均尺寸20(默认为10),平滑因子20
    Mat imgLab;
    cvtColor(img,imgLab,COLOR_BGR2Lab);
    cv::Ptr<cv::ximgproc::SuperpixelSLIC> slic=cv::ximgproc::createSuperpixelSLIC(imgLab,cv::ximgproc::SLIC,20,20);
    slic->iterate(10);//迭代次数,越大效果越好
    Mat mask_slic,mask_inv_slic,label_slic;
    slic->getLabelContourMask(mask_slic);//获取Mask,超像素边缘Mask==1
    cv::bitwise_not(mask_slic,mask_inv_slic);
    Mat imgSeg;
    cv::bitwise_and(img,img,imgSeg,mask_inv_slic);
    slic->getLabels(label_slic);//获取超像素标签
    imshow("SLIC segmentation",imgSeg);
//    int numOfSuperpixels=slic->getNumberOfSuperpixels();
//    cout<<"numOfSuperpixels="<<numOfSuperpixels<<endl;


}
/*
 * createSuperpixelSEEDS(int image_width,int image_height, int image_channels,
 *                       int num_superpixels,int prior
其中各个参数意义如下:
    image_width :输入图像宽度
    image_height: 输入图像高度
    image_channels :输入图像通道数
    num_superpixels :期望超像素数目
    num_levels :块级别数,值越高,分段越准确,形状越平滑,但需要更多的内存和CPU时间。
    histogram_bins: 直方图bins数,默认5
    double_step: 如果为true,则每个块级别重复两次以提高准确性默认false。

原文链接:https://blog.csdn.net/qq_40268412/article/details/103915197
*/
void superpixelSeeds(const Mat&img)
{
    int num_superpixels=2000;
    int num_levels=3;
    cv::Ptr<cv::ximgproc::SuperpixelSEEDS> seeds=
            cv::ximgproc::createSuperpixelSEEDS(img.cols,img.rows,img.channels()
                                                 ,num_superpixels,num_levels);
    Mat mask_seeds,mask_inv_seeds,label_seeds,img_seeds;
    seeds->iterate(img,10);
    seeds->getLabels(label_seeds);
    seeds->getLabelContourMask(mask_seeds);
    cv::bitwise_not(mask_seeds,mask_inv_seeds);
    cv::bitwise_and(img,img,img_seeds,mask_inv_seeds);
    cout<<"label_seeds.channels()="<<mask_seeds.channels()<<endl;
    cout<<"label_seeds.size="<<mask_seeds.size()<<endl;
    imshow("seeds image",img_seeds);
}

int main()
{
    Mat img=imread("D:/Qt/MyImage/baboon.jpg",1);

    superpixelSeeds(img);
//    superpixelLSC(img);


    waitKey();
    return 0;
}

superPixelSeeds()方法计算的结果如下:

   

 superpixelLSC(img)
运行结果如下:

superpixelSLIC(img);运行结果如下:

 

标签:slic,img,示例,mask,像素,opencv,seeds,cv,lsc
From: https://www.cnblogs.com/phoenixdsg/p/18213865

相关文章

  • Python OpenCV #1 - OpenCV介绍
    一、OpenCV介绍1.1OpenCV-Python教程简介OpenCV由GaryBradsky于1999年在英特尔创立,第一个版本于2000年发布。VadimPisarevsky加入了GaryBradsky,管理英特尔的俄罗斯软件OpenCV团队。2005年,OpenCV被用于斯坦利,这辆车赢得了2005年DARPA大挑战赛。后来,在WillowGarage的支......
  • ASP.NET CORE kindeditor在线编辑器示例(上传多图和插入VIDEO标签)
    2024年05月26日更新以前记录都过时了,ASP.NETASPX版本的直接看他里面的示例就好,今天把自己弄的上传多图和插入video标签的代码贴上来。。以备以后需要用的时候直接复制粘贴。。。ASP.NETCORE版本,VS2022,原来里面也有个上传多图和插入视频的。。用的flash来上传多图和插入的embe......
  • Ubuntu16.04 opencv环境搭建(C++)
    Ubuntu下vscode跑opencv程序环境搭建。目录1ubuntu查看opencv版本2下载opencv包3依赖配置4进入安装包内执行5配置环境变量6VScode配置-下载c++扩展7编译运行helloworld8在vscode中配置opencv环境9运行结果1ubuntu查看opencv版本pkg-config--modversion......
  • Python_DataFrame-的apply方法的应用示例_pandas
    DataFrame拆分-应用-合并split-apply-combineapply()方法是针对某些行或列进行操作的,applymap()方法是针对所有元素进行操作的DataFrame对象,apply函数的语法如下:DataFrame.apply(func,axis=0,raw=False,result_type=None,args=(),**kwds)Series对象,ap......
  • Django中型项目的目录结构和一个应用创建启动示例
    一个中等Django项目的目录结构包含多个应用、配置文件、静态文件和模板文件等。myproject/├──manage.py#Django项目管理脚本,用于运行服务器、迁移数据库等管理命令├──myproject/#项目配置目录,包含全局配置文件和静态、模板文件│├──__init__.......
  • Django应用创建到启动的简单示例
    一、系统环境和前置安装Ubuntu系统192.168.2.101,客户端192.168.2.100python3及虚拟环境管理库python3-venv创建项目文件创建djangoweb项目配置ALLOW_HOSTS=['*']二、创建并注册app创建django-adminstartappapp1注册app修改项目配置文件settings.py,在INSTALLED_APPS......
  • 利用Python+OpenCV实现截图匹配图像,支持自适应缩放、灰度匹配、区域匹配、匹配多个结
    一、依赖安装pipinstallopencv-pythonpipinstallpyautogui二、获取系统缩放比例注意:必须先通过ctypes获取wid之后才能导入pyautogui,如果需要在其它代码中引用该模块,最好把获取分辨率这部分代码放到程序入口处,然后传递给识图函数,避免提前导入pyautogui导致获取分辨率失......
  • 在excel中使用python 快速作图示例
    前言Excel中可以使用python算是一个旧闻了,是python之父GuidovanRossum加入微软的重要产品。刚出来的第一时间我也尝鲜了,最近作图的时候,再次使用了这个功能,感觉非常方便,推荐大家也用一下。优点:Python在云端运行,无需部署环境。可以编写脚本来自动化日常的Excel任务......
  • 视频聊天源码,同步、异步示例代码分析
    视频聊天源码,同步、异步示例代码分析同步示例代码:console.log("开始");functionsyncOperation(){console.log("同步操作");}syncOperation();console.log("结束"); 输出结果:开始同步操作结束 在上述代码中,同步操作syncOperation()按照顺序......
  • 三菱works3模块化技巧1-上一篇的程序示例
    1上一页,下一页对应HMI上的增减按钮,默认100页,从0开始,范围做一个限制2根据上一篇讲到的,每页8个阀门,对应16个控制和16个反馈,可以用M也可以用D,这里拿M举例3通过页数的变化来做清零4通过循环指令,预留16个名称更改,通过D100Z1变址寄存器实现,对应的序号通过Z2,只需在HMI中新......