使用inRange实现图片分割

1、摘要

       前期基于边缘提取、分割及孔洞填充的内容现在做一个优化。

      opencv中边缘提取、孔洞填充以及阈值分割的实际应用           

https://blog.csdn.net/fei10love/article/details/103097532?spm=1001.2014.3001.5501

2、处理思路

    【1】首先进行颜色空间转换,将原RGB转成CSV;效果图如下

原图(RGB)

空间转换后图片(HSV)

 

 

【2】然后将HSV图片进行通道分离,然后再对分离后的图片进行分割;

HSV通道分离后图片

分割后图片

 

【3】然后将RGB图片通道分离减分割后图片得到分割

 

3、代码实现

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

using namespace std;
using namespace cv;

	
int main()
{

	string sPath = "C:\\Users\\Administrator\\Desktop\\img\\segment.png";
	Mat src = imread(sPath);
	Mat srcimg;
	src.copyTo(srcimg);
	Mat hsvSrc;
	cvtColor(src, hsvSrc, CV_BGR2HSV);

	vector<Mat> vImg;
	split(hsvSrc, vImg);

	Mat img1 = vImg[0];

	Mat seg2img;
	inRange(img1, Scalar::all(90), Scalar::all(120), seg2img);

	vector<Mat> vImgs;
	split(srcimg, vImgs);

	vector<Mat> vResult(3);
	vResult[0] = vImgs[0] - seg2img;
	vResult[1] = vImgs[1] - seg2img;
	vResult[2] = vImgs[2] - seg2img;

	Mat resultImg;
	merge(vResult, resultImg);

	imshow("show image", resultImg);
	waitKey(0);


	system("pause");
	return 0;
}


 

对比以前的分割方案,现在分割效果跟代码可读性有较大提升。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值