我正试图找出使用Opencv的2张图像之间的差异。代码如下:图像处理 - 2张图像之间的差异
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include<iostream>
int main()
{
char a,b;
cv::Mat frame;
cv::Mat frame2;
VideoCapture cap(0);
if(!cap.isOpened())
{
cout<<"Camera is not connected"<<endl;
getchar();
exit(0);
}
Mat edges;
namedWindow("Camera Feed",1);
cout<<"Ready for background?(y/Y)"<<endl;
cin>>a;
if(a=='y'||a=='Y')
{
cap>>frame;
cv::cvtColor(frame,frame,CV_RGB2GRAY);
cv::GaussianBlur(frame,frame,cv::Size(3,3),2.00,0,BORDER_DEFAULT);
}
cout<<"Ready for foreground?(y/Y)"<<endl;
cin>>b;
if(b=='y'||b=='Y')
{
cap>>frame2;
cv::cvtColor(frame2,frame2,CV_RGB2GRAY);
cv::GaussianBlur(frame2,frame2,cv::Size(3,3),2.00,0,BORDER_DEFAULT);
}
cv::absdiff(frame,frame2,frame);
imwrite("img_bw.jpg",frame);
return 0;
}
该代码运行良好,但输出并不是完全黑白的,就像我想要的。我哪里错了?
由于您显然是从网络摄像头捕捉图像或某些其他视频源连续帧可能不完全相等。另外,以“前景”和“背景”为两个框架,前景与背景不同似乎是自然的。你能否详细说明你的目标是什么? – AruniRC 2012-07-13 04:12:48
假设背景是墙壁,前景是站在墙前的男人,那么最终的图像应该显示男人是白色的,而其他的背景是黑色的。根据我所读到的,图像之间的差异用白色表示,相同的部分用黑色表示。瞄准那个。 – 2012-07-13 04:17:11
啊好的,这是有道理的。所以你可以链接到你正在获得什么样的图像?一次完美的背景减法不会发生 - 您可以尝试对图像进行形态学操作以减少虚假的白色斑点,根据形状,面积等丢弃小的白色点。 – AruniRC 2012-07-13 04:25:51