コード例 #1
0
ファイル: loadV3dFFMpeg.cpp プロジェクト: Vaa3D/v3d_external
bool loadIndexedStackFFMpeg( QByteArray* buffer, Image4DSimple& img, int channel, int num_channels,
                             long width, long height )
{
    try
    {
        FFMpegVideo video( buffer );
        if ( ! video.isOpen )
            return false;
        int sx = video.getWidth();
        int sy = video.getHeight();
        int sz = video.getNumberOfFrames();
        int sc = video.getNumberOfChannels();
        // cout << "Number of frames = " << sz << endl;

        if ( channel == 0 )
            img.createBlankImage( width, height, sz, num_channels, 1 ); // 1 byte = 8 bits per value

        Image4DProxy<Image4DSimple> proxy( &img );

        int frameCount = 0;
        for ( int z = 0; z < sz; ++z )
        {
            video.fetchFrame( z );
            // int z = frameCount;
            frameCount++;
            for ( int y = 0; y < height; ++y )
            {
                for ( int x = 0; x < width; ++x )
                {
                    proxy.put_at( x, y, z, channel,
                                  video.getPixelIntensity( x, y, ( FFMpegVideo::Channel )0 )
                                );
                }
            }
        }
        cout << "Number of frames found = " << frameCount << endl;

        return true;

    }
    catch ( ... ) {}

    return false;
}
コード例 #2
0
ファイル: loadV3dFFMpeg.cpp プロジェクト: Vaa3D/v3d_external
bool loadStackFFMpegAsGray( QUrl url, Image4DSimple& img )
{
    try
    {
        FFMpegVideo video( url );
        int sx = video.getWidth();
        int sy = video.getHeight();
        int sz = video.getNumberOfFrames();
        int sc = video.getNumberOfChannels();
        // cout << "Number of frames = " << sz << endl;

        img.createBlankImage( sx, sy, sz, 1, 1 ); // 1 byte = 8 bits per value
        Image4DProxy<Image4DSimple> proxy( &img );

        int frameCount = 0;
        for ( int z = 0; z < sz; ++z )
        {
            video.fetchFrame( z );
            // int z = frameCount;
            frameCount++;
            for ( int y = 0; y < sy; ++y )
            {
                for ( int x = 0; x < sx; ++x )
                {
                    // Use average of R,G,B as gray value
                    int val = 0;
                    for ( int c = 0; c < sc; ++c )
                    {
                        val += video.getPixelIntensity( x, y, ( FFMpegVideo::Channel )c );
                    }
                    val /= sc; // average of rgb
                    proxy.put_at( x, y, z, 0, val );
                }
            }
        }
        // cout << "Number of frames found = " << frameCount << endl;

        return true;

    }
    catch ( ... ) {}

    return false;
}
コード例 #3
0
ファイル: loadV3dFFMpeg.cpp プロジェクト: Vaa3D/v3d_external
bool loadStackFFMpeg( QUrl url, Image4DSimple& img )
{
    try
    {
        FFMpegVideo video( url );
        if ( ! video.isOpen )
            return false;
        int sx = video.getWidth();
        int sy = video.getHeight();
        int sz = video.getNumberOfFrames();
        int sc = video.getNumberOfChannels();
        // cout << "Number of frames = " << sz << endl;

        img.createBlankImage( sx, sy, sz, sc, 1 ); // 1 byte = 8 bits per value
        Image4DProxy<Image4DSimple> proxy( &img );

        int frameCount = 0;
        for ( int z = 0; z < sz; ++z )
        {
            video.fetchFrame( z );
            // int z = frameCount;
            frameCount++;
            for ( int c = 0; c < sc; ++c )
            {
                for ( int y = 0; y < sy; ++y )
                {
                    for ( int x = 0; x < sx; ++x )
                    {
                        proxy.put_at( x, y, z, c,
                                      video.getPixelIntensity( x, y, ( FFMpegVideo::Channel )c )
                                    );
                    }
                }
            }
        }
        cout << "Number of frames found = " << frameCount << endl;

        return true;

    }
    catch ( ... ) {}

    return false;
}