超像素分割例程

超像素分割例程

代码如下(示例):

#include <opencv2/opencv.hpp>
#include <opencv2/ximgproc.hpp>
#include <iostream>

int main() {
 // 读取图片
 cv::Mat img = cv::imread("C:\\Users\\svs\\Desktop\\test.jpeg");
 if (img.empty()) {
 std::cerr << "无法读取图片!" << std::endl;
 return -1;
 }

 // 初始化SLIC参数,超像素平均尺寸20,平滑因子20.0
 int region_size = 20;
 float ruler = 20.0;
 int num_iterations = 10;

 // 创建SLIC超像素对象,SLICO 使用自适应紧致因子
 cv::Ptr<cv::ximgproc::SuperpixelSLIC> slic = cv::ximgproc::createSuperpixelSLIC(img, cv::ximgproc::SLICO, region_size, ruler);

 // 运行SLIC算法,进行迭代
 slic->iterate(num_iterations);

 // 获取超像素边界的掩码
 cv::Mat mask_slic;
 slic->getLabelContourMask(mask_slic);
 imshow("maks", mask_slic);
 // 获取超像素的标签
 cv::Mat label_slic;
 slic->getLabels(label_slic);
 std::cout << label_slic << std::endl;
 // 获取超像素的数量
 int number_slic = slic->getNumberOfSuperpixels();
 std::cout << "超像素数量: " << number_slic << std::endl;

 // 反转掩码
 cv::Mat mask_inv_slic;
 cv::bitwise_not(mask_slic, mask_inv_slic);

 // 在原图上应用掩码,绘制超像素边界
 cv::Mat img_slic;
 img.copyTo(img_slic, mask_inv_slic);

 // 显示结果
 cv::imshow("Original Image", img);
 cv::imshow("SLIC Superpixels", img_slic);

 cv::waitKey(0);
 cv::destroyAllWindows();

 return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值