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;
}
对比以前的分割方案,现在分割效果跟代码可读性有较大提升。