1

MATLABでカラー動画を読み込み、特定のフレームを抽出し、rgb2gray関数を使ってグレースケール画像に変換するのですが、同じ動画をOpenCV2.3.1で読み込むと、同じフレームを抽出してからグレースケールに変換してもうまくいきません。 MATLAB と同じグレー スケール値を与えません。何故ですか?

これは、OpenCV を使用した C++ コードです。

VideoCapture cap(0);    
cap.open("Human sperm evaluation_0.avi");    

Mat image;    
Mat gray(480,640,CV_8U);    

for(int i=0;i<513;i++)
{
    cap>>image;
    cvtColor(image,gray,CV_RGB2GRAY);
}

for(int i=0;i<20;i++)
{
    for(int j=0;j<20;j++)
    {
        cout<<(int)gray.at<uchar>(i,j)<<' ';
    }
}
4

3 に答える 3

5

まず、OpenCV のすべてのカラー画像は RGB ではなく BGR であるため、問題の 1 つは OpenCV が変換を間違っている可能性があります。BGR2GRAY を使用する必要があります。そして2番目に、私がmatlabでよく覚えていれば、画像の値の範囲を指定する必要があります。灰色の画像の場合は、0 から 255 の間で指定する必要があります。

これがお役に立てば幸いです。

于 2012-09-07T03:54:35.063 に答える