从背景中提取前景
Extract Foreground from background
我有一张背景图片和一张前景图片。
他们的观点是平等的。
但是阴影是不同的。
我要提取腿部轮廓。
我应用了背景差异,但效果不是很好。
请哪位好心人告诉我一下。
你可以看到下面的图片。
谢谢。
如果您只对提取腿部图像感兴趣,那么基于 HSV 的皮肤检测,然后重复扩张应该会产生更好的结果。
请参阅下面的代码:
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<stdio.h>
using namespace std;
using namespace cv;
int main()
{
Mat b=imread("b2.png");//back
Mat f=imread("f2.png");//fore
Mat hsv_th;
cvtColor(b,b,CV_BGR2HSV);
cvtColor(f,f,CV_BGR2HSV);
inRange(f,Scalar(0,100,0),Scalar(100,255,100),hsv_th);
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
for(;;)
{
imshow("fore",f);
imshow("hsv",hsv_th);
char c=waitKey(10);
if(c=='b')//break when 'b' is pressed
{
break;
}
}
return 0;
}
输出图像:
我有一张背景图片和一张前景图片。 他们的观点是平等的。 但是阴影是不同的。 我要提取腿部轮廓。
我应用了背景差异,但效果不是很好。 请哪位好心人告诉我一下。 你可以看到下面的图片。
谢谢。
如果您只对提取腿部图像感兴趣,那么基于 HSV 的皮肤检测,然后重复扩张应该会产生更好的结果。 请参阅下面的代码:
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<stdio.h>
using namespace std;
using namespace cv;
int main()
{
Mat b=imread("b2.png");//back
Mat f=imread("f2.png");//fore
Mat hsv_th;
cvtColor(b,b,CV_BGR2HSV);
cvtColor(f,f,CV_BGR2HSV);
inRange(f,Scalar(0,100,0),Scalar(100,255,100),hsv_th);
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
for(;;)
{
imshow("fore",f);
imshow("hsv",hsv_th);
char c=waitKey(10);
if(c=='b')//break when 'b' is pressed
{
break;
}
}
return 0;
}
输出图像: