使用inRange实现图片分割

本文介绍了一种基于HSV颜色空间的图像分割方法,并通过代码实现了从RGB到HSV的转换、HSV通道分离以及后续的图像分割过程。相较于之前的方案,此方法在分割效果和代码可读性上都有显著提升。

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;
}


 

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

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值