Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从背景中提取前景_C++_Opencv_Image Processing_Computer Vision - Fatal编程技术网

C++ 从背景中提取前景

C++ 从背景中提取前景,c++,opencv,image-processing,computer-vision,C++,Opencv,Image Processing,Computer Vision,我有背景图像和前景图像。 他们的观点是平等的。 但阴影是不同的。 我将提取腿部的轮廓 我应用了背景差分,但效果不太好。 请有人告诉我好办法。 你可以看到下面的图片 谢谢。如果你只对提取腿部图像感兴趣,那么基于HSV的皮肤检测,然后重复扩张应该会产生更好的结果。 见下面的代码: #include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/imgproc/imgproc.hpp> #inc

我有背景图像和前景图像。 他们的观点是平等的。 但阴影是不同的。 我将提取腿部的轮廓

我应用了背景差分,但效果不太好。 请有人告诉我好办法。 你可以看到下面的图片


谢谢。

如果你只对提取腿部图像感兴趣,那么基于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;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间cv;
int main()
{
Mat b=imread(“b2.png”);//返回
Mat f=imread(“f2.png”);//fore
Mat hsv_th;
CVT颜色(b、b、CV_BGR2HSV);
CVT颜色(f,f,CV_BGR2HSV);
范围(f,标量(0100,0),标量(100251100),hsv_th);
扩张(hsv_th,hsv_th,cv::Mat());
扩张(hsv_th,hsv_th,cv::Mat());
扩张(hsv_th,hsv_th,cv::Mat());
扩张(hsv_th,hsv_th,cv::Mat());
对于(;;)
{
imshow(“fore”,f);
imshow(“hsv”,hsv_th);
字符c=等待键(10);
if(c=='b')//按下'b'时中断
{
打破
}
}
返回0;
}
输出图像:

OP正在处理静态图像。你不能计算平均背景。你可以改进答案,提供显示结果的代码;我已经改变了背景和前景。请再复习一遍。谢谢。可能有两份