从背景中提取前景

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

输出图像: