2

Opencvを使用して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;
}

コードは正常に実行されていますが、出力は私が望むように完全に白黒ではありません。どこが間違っているのですか?

4

1 に答える 1

1

指定したコードは、2つの画像間の個々のピクセルの違いに対応するグレーの色合いを出力します。カメラセンサーのノイズや変動性のために、変更されていない要素間でも常に小さな違いがあります。純粋に白黒が必要な場合は、差が大きいしきい値を選択し、そのしきい値より下のすべてのピクセルを0に変換し、しきい値より上のすべてのピクセルを255に変換する必要があります。

于 2012-07-13T04:25:27.613 に答える