1

私は10フレームの平均値を作成しようとしているので、次のことを試しました。

 .....
cv::Mat frame,outf,resultframe1, resultframe2;
VideoCapture cap(1);
cap>> frame;
resultframe1 = Mat::zeros(frame.rows,frame.cols,CV_32F);
resultframe2 = Mat::zeros(frame.rows,frame.cols,CV_32F);
while(waitKey(0) != 27}{
cap>> frame;
if ( waitKey(1) = 'm'){
for (  int j = 0 ; j <= 10 ; j++){  
cv::add(frame,resultframe1,resultframe2);// here crashes the program ????? 
     ....
 }

}

どのようなアイデアでも、どうすればそれを解決できますか。前もって感謝します

4

1 に答える 1

2

OpenCV C ++インターフェイスで演算子を使用できる場合は、add関数を明示的に呼び出す必要はありません。指定したフレーム数を平均化する方法は次のとおりです。

void main()
{
    cv::VideoCapture cap(-1);

    if(!cap.isOpened())
    {
        cout<<"Capture Not Opened"<<endl;   return;
    }

    //Number of frames to take average of
    const int count = 10;

    const int width = cap.get(CV_CAP_PROP_FRAME_WIDTH);
    const int height = cap.get(CV_CAP_PROP_FRAME_HEIGHT);

    cv::Mat frame, frame32f;

    cv::Mat resultframe = cv::Mat::zeros(height,width,CV_32FC3);

    for(int i=0; i<count; i++)
    {
        cap>>frame;

        if(frame.empty())
        {
            cout<<"Capture Finished"<<endl; break;
        }

        //Convert the input frame to float, without any scaling
        frame.convertTo(frame32f,CV_32FC3); 

        //Add the captured image to the result.
        resultframe += frame32f;
    }

    //Average the frame values.
    resultframe *= (1.0/count);

    /*
     * Result frame is of float data type
     * Scale the values from 0.0 to 1.0 to visualize the image.
     */
    resultframe /= 255.0f;

    cv::imshow("Average",resultframe);
    cv::waitKey();

}

行列を作成するときは、のCV_32FC3代わりに、常に完全な型を指定してCV_32Fください。

于 2013-01-07T18:43:04.097 に答える