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; }
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; }
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; }