本文整理汇总了C++中ImageBuf::localpixels方法的典型用法代码示例。如果您正苦于以下问题:C++ ImageBuf::localpixels方法的具体用法?C++ ImageBuf::localpixels怎么用?C++ ImageBuf::localpixels使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ImageBuf
的用法示例。
在下文中一共展示了ImageBuf::localpixels方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sourcesmf
ImageBuf *
SMT::reconstructBig()
{
if( verbose )cout << "INFO: Reconstructing Big\n";
ImageBuf *tileBuf = NULL;
//Load tilemap from SMF
ImageBuf *tilemapBuf = NULL;
if( is_smf( tilemapFile ) ) {
SMF sourcesmf(tilemapFile);
tilemapBuf = sourcesmf.getTilemap();
}
// Else load tilemap from image
if( !tilemapBuf ) {
tilemapBuf = new ImageBuf( tilemapFile );
tilemapBuf->read(0,0,false,TypeDesc::UINT);
if( !tilemapBuf->initialized() ) {
delete tilemapBuf;
if( !quiet )printf("ERROR: %s cannot be loaded.\n",
tilemapFile.c_str());
return NULL;
}
}
//TODO Else load tilemap from csv
unsigned int *tilemap = (unsigned int *)tilemapBuf->localpixels();
int xtiles = tilemapBuf->spec().width;
int ztiles = tilemapBuf->spec().height;
// allocate enough data for our large image
ImageSpec bigSpec( xtiles * tileRes, ztiles * tileRes, 4, TypeDesc::UINT8 );
ImageBuf *bigBuf = new ImageBuf( "big", bigSpec );
// Loop through tile index
for( int z = 0; z < ztiles; ++z ) {
for( int x = 0; x < xtiles; ++x ) {
int tilenum = tilemap[z * xtiles + x];
tileBuf = getTile(tilenum);
int xbegin = tileRes * x;
int ybegin = tileRes * z;
ImageBufAlgo::paste(*bigBuf, xbegin, ybegin, 0, 0, *tileBuf);
delete [] (unsigned char *)tileBuf->localpixels();
delete tileBuf;
if( verbose )printf("\033[0GINFO: Processing tile %i of %i.",
z * xtiles + x, xtiles * ztiles );
}
}
cout << endl;
delete tilemapBuf;
if( is_smf( tilemapFile ) ) delete [] tilemap;
return bigBuf;
}
示例2: ASSERT
ImageBuf::ImageBuf (const ImageBuf &src)
: m_name(src.m_name), m_fileformat(src.m_fileformat),
m_nsubimages(src.m_nsubimages),
m_current_subimage(src.m_current_subimage),
m_current_miplevel(src.m_current_miplevel),
m_nmiplevels(src.m_nmiplevels),
m_spec(src.m_spec), m_nativespec(src.m_nativespec),
m_pixels(src.m_pixels),
m_localpixels(src.m_localpixels),
m_clientpixels(src.m_clientpixels),
m_spec_valid(src.m_spec_valid), m_pixels_valid(src.m_pixels_valid),
m_badfile(src.m_badfile),
m_orientation(src.m_orientation),
m_pixelaspect(src.m_pixelaspect),
m_imagecache(src.m_imagecache),
m_cachedpixeltype(src.m_cachedpixeltype),
m_deepdata(src.m_deepdata)
{
if (src.localpixels()) {
// Source had the image fully in memory (no cache)
if (src.m_clientpixels) {
// Source just wrapped the client app's pixels
ASSERT (0 && "ImageBuf wrapping client buffer not yet supported");
} else {
// We own our pixels
// Make sure our localpixels points to our own owned memory.
m_localpixels = &m_pixels[0];
}
} else {
// Source was cache-based or deep
// nothing else to do
}
}
示例3: bigSpec
ImageBuf *
SMT::collateBig()
{
if( verbose )cout << "INFO: Collating Big\n";
if( !loadFile.compare("") ) {
if( !quiet )cout << "ERROR: No SMT Loaded." << endl;
return NULL;
}
// OpenImageIO
ImageBuf *tileBuf = NULL;
// Allocate Image size large enough to accomodate the tiles,
int collateStride = ceil(sqrt(header.nTiles));
int bigRes = collateStride * header.tileRes;
ImageSpec bigSpec(bigRes, bigRes, 4, TypeDesc::UINT8 );
ImageBuf *bigBuf = new ImageBuf( "big", bigSpec);
// Loop through tiles copying the data to our image buffer
for(int i = 0; i < header.nTiles; ++i ) {
// Pull data
tileBuf = getTile(i);
int dx = header.tileRes * (i % collateStride);
int dy = header.tileRes * (i / collateStride);
ImageBufAlgo::paste(*bigBuf, dx, dy, 0, 0, *tileBuf);
delete [] (unsigned char *)tileBuf->localpixels();
delete tileBuf;
if( verbose )printf("\033[0GINFO: Processing tile %i of %i.",
i, header.nTiles );
}
if( verbose ) cout << endl;
return bigBuf;
}
示例4: smt
//.........这里部分代码省略.........
ImageSpec tileSpec(tileRes, tileRes, 4, TypeDesc::UINT8 );
// Comparison vars
bool match;
bool yee = false;
unsigned int i;
string hash;
vector<string> hashTable;
TileBufListEntry *listEntry;
deque<TileBufListEntry *> tileList;
// Open smt file for writing tiles
smt.open(filename, ios::binary | ios::out | ios::app );
// loop through tile columns
for ( int z = 0; z < tcz; z++) {
// loop through tile rows
for ( int x = 0; x < tcx; x++) {
currentTile = z * tcx + x + 1;
gettimeofday(&t1, NULL);
// pull a region of the big image to use as a tile.
roi.xbegin = x * tileRes;
roi.xend = x * tileRes + tileRes;
roi.ybegin = z * tileRes;
roi.yend = z * tileRes + tileRes;
roi.zbegin = 0;
roi.zend = 1;
roi.chbegin = 0;
roi.chend = 4;
ImageBuf tempBuf;
ImageBufAlgo::crop( tempBuf, *bigBuf, roi );
ImageBuf *tileBuf = new ImageBuf( filename, tileSpec, tempBuf.localpixels() );
// reset match variables
match = false;
i = nTiles;
if( cnum < 0) {
// no attempt at reducing tile sizes
i = nTiles;
} else if( cnum == 0) {
// only exact matches will be referenced.
hash = ImageBufAlgo::computePixelHashSHA1( *tileBuf );
for( i = 0; i < hashTable.size(); ++i ) {
if( !hashTable[i].compare( hash ) ) {
match = true;
break;
}
}
if( !match ) hashTable.push_back( hash );
} else if( !yee ) {
//Comparison based on numerical differences of pixels
listEntry = new TileBufListEntry;
listEntry->image.copy(*tileBuf);
listEntry->tileNum = nTiles;
ImageBufAlgo::CompareResults result;
deque< TileBufListEntry * >::iterator it;
for(it = tileList.begin(); it != tileList.end(); it++ ) {
TileBufListEntry *listEntry2 = *it;
ImageBufAlgo::compare( *tileBuf, listEntry2->image,
cpet, 1.0f, result);
示例5: DASSERT
IplImage *
ImageBufAlgo::to_IplImage (const ImageBuf &src)
{
#ifdef USE_OPENCV
ImageBuf tmp = src;
ImageSpec spec = tmp.spec();
// Make sure the image buffer is initialized.
if (!tmp.initialized() && !tmp.read(tmp.subimage(), tmp.miplevel(), true)) {
DASSERT (0 && "Could not initialize ImageBuf.");
return NULL;
}
int dstFormat;
TypeDesc dstSpecFormat;
if (spec.format == TypeDesc(TypeDesc::UINT8)) {
dstFormat = IPL_DEPTH_8U;
dstSpecFormat = spec.format;
} else if (spec.format == TypeDesc(TypeDesc::INT8)) {
dstFormat = IPL_DEPTH_8S;
dstSpecFormat = spec.format;
} else if (spec.format == TypeDesc(TypeDesc::UINT16)) {
dstFormat = IPL_DEPTH_16U;
dstSpecFormat = spec.format;
} else if (spec.format == TypeDesc(TypeDesc::INT16)) {
dstFormat = IPL_DEPTH_16S;
dstSpecFormat = spec.format;
} else if (spec.format == TypeDesc(TypeDesc::HALF)) {
dstFormat = IPL_DEPTH_32F;
// OpenCV does not support half types. Switch to float instead.
dstSpecFormat = TypeDesc(TypeDesc::FLOAT);
} else if (spec.format == TypeDesc(TypeDesc::FLOAT)) {
dstFormat = IPL_DEPTH_32F;
dstSpecFormat = spec.format;
} else if (spec.format == TypeDesc(TypeDesc::DOUBLE)) {
dstFormat = IPL_DEPTH_64F;
dstSpecFormat = spec.format;
} else {
DASSERT (0 && "Unknown data format in ImageBuf.");
return NULL;
}
IplImage *ipl = cvCreateImage(cvSize(spec.width, spec.height), dstFormat, spec.nchannels);
if (!ipl) {
DASSERT (0 && "Unable to create IplImage.");
return NULL;
}
size_t pixelsize = dstSpecFormat.size() * spec.nchannels;
// Account for the origin in the line step size, to end up with the
// standard OIIO origin-at-upper-left:
size_t linestep = ipl->origin ? -ipl->widthStep : ipl->widthStep;
bool converted = convert_image(spec.nchannels, spec.width, spec.height, 1,
tmp.localpixels(), spec.format,
spec.pixel_bytes(), spec.scanline_bytes(), 0,
ipl->imageData, dstSpecFormat,
pixelsize, linestep, 0);
if (!converted) {
DASSERT (0 && "convert_image failed.");
cvReleaseImage(&ipl);
return NULL;
}
// OpenCV uses BGR ordering
if (spec.nchannels == 3) {
cvCvtColor(ipl, ipl, CV_RGB2BGR);
} else if (spec.nchannels == 4) {
cvCvtColor(ipl, ipl, CV_RGBA2BGRA);
}
return ipl;
#else
return NULL;
#endif
}
示例6: roi
bool
SMF::saveGrass()
{
if( verbose )cout << "INFO: saveGrass\n";
SMFEHGrass *grassHeader = NULL;
for( unsigned int i = 0; i < extraHeaders.size(); ++i ) {
if( extraHeaders[ i ]->type == 1 )
grassHeader = reinterpret_cast<SMFEHGrass *>( extraHeaders[ i ] );
}
if( !grassHeader )return true;
ImageBuf *imageBuf = NULL;
ROI roi( 0, width * 16,
0, length * 16,
0, 1,
0, 1);
ImageSpec imageSpec(roi.xend, roi.yend, roi.chend, TypeDesc::UINT8 );
if( is_smf(grassFile) ) {
// Load from SMF
SMF sourcesmf(grassFile);
imageBuf = sourcesmf.getGrass();
}
if( !imageBuf ) {
// Load image file
imageBuf = new ImageBuf( grassFile );
imageBuf->read( 0, 0, false, TypeDesc::UINT8 );
if( imageBuf->initialized() ) {
delete imageBuf;
imageBuf = NULL;
}
}
if( !imageBuf ) {
// Generate blank
imageBuf = new ImageBuf( "grass", imageSpec );
}
imageSpec = imageBuf->specmod();
ImageBuf fixBuf;
// Fix the number of channels
if( imageSpec.nchannels != roi.chend ) {
int map[] = {0};
ImageBufAlgo::channels(fixBuf, *imageBuf, roi.chend, map );
imageBuf->copy( fixBuf );
fixBuf.clear();
}
// Fix the Dimensions
if ( imageSpec.width != roi.xend || imageSpec.height != roi.yend ) {
if( verbose )
printf( "\tWARNING: %s is (%i,%i), wanted (%i, %i) Resampling.\n",
typeFile.c_str(), imageSpec.width, imageSpec.height, roi.xend, roi.yend);
ImageBufAlgo::resample(fixBuf, *imageBuf, false, roi);
imageBuf->copy( fixBuf );
fixBuf.clear();
}
unsigned char *pixels = (unsigned char *)imageBuf->localpixels();
char filename[256];
sprintf( filename, "%s.smf", outPrefix.c_str() );
if( verbose )printf( " Source: %s.\n", grassFile.c_str() );
fstream smf(filename, ios::binary | ios::in | ios::out);
smf.seekp(grassHeader->grassPtr);
smf.write( (char *)pixels, imageBuf->spec().image_bytes() );
smf.close();
delete imageBuf;
if( is_smf( grassFile ) ) delete [] pixels;
return false;
}
示例7: smf
bool
SMF::saveTilemap()
{
if( verbose )cout << "INFO: saveTilemap\n";
char filename[256];
sprintf( filename, "%s.smf", outPrefix.c_str() );
fstream smf(filename, ios::binary | ios::in | ios::out);
smf.seekp(tilesPtr);
// Tiles Header
int nTileFiles = smtList.size();
smf.write( (char *)&nTileFiles, 4);
smf.write( (char *)&nTiles, 4);
if(verbose)printf( " %i tiles referenced in %i files\n", nTiles, nTileFiles );
// SMT Names
for(unsigned int i = 0; i < smtList.size(); ++i) {
if( verbose )printf( "\t%i %s\n", smtTiles[i], smtList[i].c_str() );
smf.write( (char *)&smtTiles[i], 4);
smf.write( smtList[i].c_str(), smtList[i].size() +1 );
}
// Dimensions of displacement map.
ImageBuf *imageBuf = NULL;
ROI roi( 0, width * 16, // xbegin, xend
0, length * 16, // ybegin, yend
0, 1, // zbegin, zend
0, 1); // chbegin, chend
ImageSpec imageSpec( roi.xend, roi.yend, roi.chend, TypeDesc::UINT );
if( is_smf(tilemapFile) ) {
// Load from SMF
SMF sourcesmf(tilemapFile);
imageBuf = sourcesmf.getTilemap();
}
if( !imageBuf ) {
// load image file
imageBuf = new ImageBuf( tilemapFile );
imageBuf->read( 0, 0, false, TypeDesc::UINT );
if( !imageBuf->initialized() ) {
delete imageBuf;
imageBuf = NULL;
}
}
if( !imageBuf ) {
// Generate blank
imageBuf = new ImageBuf( "tilemap", imageSpec );
for ( unsigned int i = 0; i < imageSpec.image_pixels(); ++i )
((unsigned int *)imageBuf->localpixels())[ i ] = i;
}
imageSpec = imageBuf->specmod();
ImageBuf fixBuf;
// Fix the number of channels
if( imageSpec.nchannels != roi.chend ) {
int map[] = {0};
ImageBufAlgo::channels(fixBuf, *imageBuf, roi.chend, map);
imageBuf->copy(fixBuf);
fixBuf.clear();
}
// Fix the size
// FIXME image should never be resized, instead tiling either from an edge or centred.
if ( imageSpec.width != roi.xend || imageSpec.height != roi.yend ) {
if( verbose )
printf( "\tWARNING: %s is (%i,%i), wanted (%i, %i), Resampling.\n",
tilemapFile.c_str(), imageSpec.width, imageSpec.height, roi.xend, roi.yend );
ImageBufAlgo::resample(fixBuf, *imageBuf, false, roi);
imageBuf->copy(fixBuf);
fixBuf.clear();
}
unsigned int *pixels = (unsigned int *)imageBuf->localpixels();
// write the data to the smf
smf.write( (char *)pixels, imageBuf->spec().image_bytes() );
smf.close();
delete imageBuf;
if( is_smf( tilemapFile ) ) delete [] pixels;
return false;
}