PLearn 0.1
|
uses top left coordinate system Pixel (i,j) is at row i, column j More...
#include <RGBImage.h>
Public Member Functions | |
RGBImage (int the_height=0, int the_width=0) | |
RGBImage (Mat r, Mat g, Mat b) | |
r g and b must have values in range [0-255] | |
~RGBImage () | |
int | width () const |
int | height () const |
void | resize (int newheight, int newwidth) |
RGB | getPixel (int i, int j) const |
return RGB value of Pixel of row i and column j | |
void | setPixel (int i, int j, RGB value) |
sets RGB value of pixel in row i and column j | |
void | fill (RGB color) |
void | clear () |
void | loadPPM (const char *filename) |
void | savePPM (const char *filename) const |
void | loadJPEG (const char *filename, int scale=1) |
void | display () const |
void | displayAndWait () const |
void | removeBorders (int top_border, int bottom_border, int left_border, int right_border) |
remove borders around the image | |
void | removeBorders (int border) |
remove borders of thickness "border" from image (in-place), on all sides | |
void | shrinkToIntersection (int &i, int &j, int &h, int &w) const |
shrinks the box that starts at position (i,j) (in this image) and of size (h,w) to its intersection with this image's box (0,0,this->height,this->width_) | |
void | blit (int desti, int destj, RGBImage srcim) |
blits srcim at position (desti,destj) in this image | |
RGB | computeAverage () const |
Vec | computeHistogram (int r_bins=16, int g_bins=16, int b_bins=16, bool do_normalize=false) |
Returns a vector of size r_bins*g_bins*b_bins which contains the number of image pixels whose colors fell in the corresponding RGB range. | |
Protected Attributes | |
int | height_ |
int | width_ |
PP< Storage< RGB > > | storage |
char | tmpfilename [100] |
temporary file in which the image may be saved when displayed |
uses top left coordinate system Pixel (i,j) is at row i, column j
Definition at line 103 of file RGBImage.h.
r g and b must have values in range [0-255]
Definition at line 75 of file RGBImage.cc.
References b, g, height_, i, j, setPixel(), storage, tmpfilename, and width_.
:height_(r.length()), width_(r.width()) { tmpnam(tmpfilename); storage = new Storage<RGB>(height_*width_); for(int i=0; i<height_; i++) for(int j=0; j<width_; j++) setPixel(i,j,RGB((unsigned char)r(i,j), (unsigned char)g(i,j), (unsigned char)b(i,j))); }
PLearn::RGBImage::~RGBImage | ( | ) |
blits srcim at position (desti,destj) in this image
Definition at line 224 of file RGBImage.cc.
References getPixel(), height_, i, j, setPixel(), shrinkToIntersection(), and width_.
{ int blit_i = desti; int blit_j = destj; int blit_h = srcim.height_; int blit_w = srcim.width_; shrinkToIntersection(blit_i,blit_j,blit_h,blit_w); if(blit_h==0 || blit_w==0) return; int src_i = blit_i-desti; int src_j = blit_j-destj; for(int i=0; i<blit_h; i++) for(int j=0; j<blit_w; j++) setPixel(blit_i+i, blit_j+j, srcim.getPixel(src_i+i,src_j+j)); }
void PLearn::RGBImage::clear | ( | ) | [inline] |
Definition at line 124 of file RGBImage.h.
Referenced by RGBImage().
{ fill(RGB(255,255,255)); }
RGB PLearn::RGBImage::computeAverage | ( | ) | const |
Definition at line 244 of file RGBImage.cc.
References b, PLearn::RGB::b, g, PLearn::RGB::g, height_, PLERROR, PLearn::RGB::r, storage, and width_.
Vec PLearn::RGBImage::computeHistogram | ( | int | r_bins = 16 , |
int | g_bins = 16 , |
||
int | b_bins = 16 , |
||
bool | do_normalize = false |
||
) |
Returns a vector of size r_bins*g_bins*b_bins which contains the number of image pixels whose colors fell in the corresponding RGB range.
Definition at line 264 of file RGBImage.cc.
References PLearn::RGB::b, PLearn::RGB::g, getPixel(), height_, i, j, PLearn::RGB::r, and width_.
Referenced by PLearn::RGBImageDB::computeHistogramRepresentation().
{ Vec histo(r_bins*g_bins*b_bins); for(int i=0; i<height_; i++) for(int j=0; j<width_; j++) { RGB pix = getPixel(i,j); int r_bin = pix.r*r_bins/256; int g_bin = pix.g*g_bins/256; int b_bin = pix.b*b_bins/256; int pos = r_bin*g_bins*b_bins + g_bin*b_bins + b_bin; histo[pos]++; } if(do_normalize) histo /= height_*width_; return histo; }
void PLearn::RGBImage::display | ( | ) | const |
Definition at line 180 of file RGBImage.cc.
References savePPM(), and tmpfilename.
{ savePPM(tmpfilename); char command[1000]; sprintf(command,"xv %s &",tmpfilename); system(command); }
void PLearn::RGBImage::displayAndWait | ( | ) | const |
Definition at line 200 of file RGBImage.cc.
References savePPM(), and tmpfilename.
{ savePPM(tmpfilename); char command[1000]; sprintf(command,"xv %s",tmpfilename); system(command); unlink(tmpfilename); }
void PLearn::RGBImage::fill | ( | RGB | color | ) |
return RGB value of Pixel of row i and column j
Definition at line 153 of file RGBImage.h.
Referenced by blit(), computeHistogram(), and PLearn::RGBImageVMatrix::sample().
{ #ifdef BOUNDCHECK if(!storage) PLERROR("In RGBImage::getPixeel(int i, int j) EMPTY IMAGE!!!"); if(i<0 || j<0 || i>=height_ || j>=width_) PLERROR("In RGBImage::getPixel(int i, int j) OUT OF IMAGE BOUNDS"); #endif return storage->data[i*width_+j]; }
int PLearn::RGBImage::height | ( | ) | const [inline] |
Definition at line 118 of file RGBImage.h.
Referenced by PLearn::RGBImageVMatrix::RGBImageVMatrix(), and PLearn::RGBImageVMatrix::setImage().
{ return height_; }
void PLearn::RGBImage::loadJPEG | ( | const char * | filename, |
int | scale = 1 |
||
) |
Definition at line 189 of file RGBImage.cc.
References PLearn::endl(), loadPPM(), and tmpfilename.
Referenced by PLearn::RGBImageDB::getImage().
{ char command[1000]; sprintf(command,"djpeg -pnm -scale 1/%d %s > %s", scale, filename, tmpfilename); system(command); cout << command << endl; loadPPM(tmpfilename); unlink(tmpfilename); }
void PLearn::RGBImage::loadPPM | ( | const char * | filename | ) |
Definition at line 138 of file RGBImage.cc.
References height_, in, PLERROR, PLWARNING, resize(), storage, and width_.
Referenced by loadJPEG().
{ int ncolors; ifstream in(filename); if(!in) PLERROR("In RGBImage::loadPPM could not open file %s for reading",filename); char imagetype[20]; int newheight, newwidth; in >> imagetype >> newwidth >> newheight >> ncolors; char tmp[100]; in.getline(tmp,99); // skip until end of line if(strcmp(imagetype,"P6")!=0) PLERROR("In RGBImage::loadPPM unsupported format (not a P6 PPM)"); resize(newheight, newwidth); RGB* data = storage->data; PLWARNING("In RGBImage::loadPPM - Code has been changed to compile, but hasn't been tested (remove this warning if it works)"); // The following line: // in.read((unsigned char*)data,height_*width_*3); // has been replaced by: in.read((char*)data,height_*width_*3); }
void PLearn::RGBImage::removeBorders | ( | int | border | ) | [inline] |
remove borders of thickness "border" from image (in-place), on all sides
Definition at line 137 of file RGBImage.h.
References removeBorders().
Referenced by removeBorders().
{ removeBorders(border,border,border,border); }
void PLearn::RGBImage::removeBorders | ( | int | top_border, |
int | bottom_border, | ||
int | left_border, | ||
int | right_border | ||
) |
remove borders around the image
Definition at line 103 of file RGBImage.cc.
References c, d, height_, PLERROR, storage, and width_.
Referenced by PLearn::RGBImageDB::getImage().
{ if(!storage) PLERROR("Empty RGBImage"); int newwidth = width_ - (left_border + right_border); int newheight = height_ - (top_border + bottom_border); if (newheight < 1) PLERROR("RGBImage::removeBorders(%d,%d,%d,%d): can't remove more than height_(%d)", top_border,bottom_border,left_border,right_border,height_); if (newwidth < 1) PLERROR("RGBImage::removeBorders(%d,%d,%d,%d): can't remove more than width_(%d)", top_border,bottom_border,left_border,right_border,width_); PP< Storage<RGB> > newstorage = new Storage<RGB>(newheight*newwidth); RGB* d= newstorage->data; RGB* data = storage->data; for (int r=0;r<newheight;r++) for (int c=0;c<newwidth;c++,d++) *d = data[(top_border+r)*width_+(left_border+c)]; height_=newheight; width_=newwidth; storage = newstorage; }
void PLearn::RGBImage::savePPM | ( | const char * | filename | ) | const |
Definition at line 162 of file RGBImage.cc.
References PLearn::endl(), height_, PLERROR, PLWARNING, storage, and width_.
Referenced by display(), and displayAndWait().
{ if(!storage) PLERROR("Empty RGBImage"); RGB* data = storage->data; ofstream out(filename); if(!out) PLERROR("In RGBImage::savePPM could not open file for writing"); out << "P6\n" << width_ << ' ' << height_ << ' ' << 255 << endl; PLWARNING("In RGBImage::loadPPM - Code has been changed to compile, but hasn't been tested (remove this warning if it works)"); // The following line: // out.write((unsigned char*)data, height_*width_*3); // has been replaced by: out.write((char*)data, height_*width_*3); out.flush(); }
sets RGB value of pixel in row i and column j
Definition at line 165 of file RGBImage.h.
Referenced by blit(), and RGBImage().
{ #ifdef BOUNDCHECK if(!storage) PLERROR("In RGBImage::getPixeel(int i, int j) EMPTY IMAGE!!!"); if(i<0 || j<0 || i>=height_ || j>=width_) PLERROR("In RGBImage::getPixel(int i, int j) OUT OF IMAGE BOUNDS"); #endif storage->data[i*width_+j] = value; }
shrinks the box that starts at position (i,j) (in this image) and of size (h,w) to its intersection with this image's box (0,0,this->height,this->width_)
Definition at line 210 of file RGBImage.cc.
References height_, MAX, MIN, and width_.
Referenced by blit().
{ int istart = MAX(0,i); int iend = MIN(i+h,height_); int jstart = MAX(0,j); int jend = MIN(j+w,width_); i = istart; j = jstart; h = MAX(iend-istart,0); w = MAX(jend-jstart,0); }
int PLearn::RGBImage::width | ( | ) | const [inline] |
Definition at line 117 of file RGBImage.h.
Referenced by PLearn::RGBImageVMatrix::RGBImageVMatrix(), and PLearn::RGBImageVMatrix::setImage().
{ return width_; }
int PLearn::RGBImage::height_ [protected] |
Definition at line 106 of file RGBImage.h.
Referenced by blit(), computeAverage(), computeHistogram(), fill(), loadPPM(), removeBorders(), resize(), RGBImage(), savePPM(), and shrinkToIntersection().
PP< Storage<RGB> > PLearn::RGBImage::storage [protected] |
Definition at line 109 of file RGBImage.h.
Referenced by computeAverage(), fill(), loadPPM(), removeBorders(), resize(), RGBImage(), and savePPM().
char PLearn::RGBImage::tmpfilename[100] [protected] |
temporary file in which the image may be saved when displayed
Definition at line 110 of file RGBImage.h.
Referenced by display(), displayAndWait(), loadJPEG(), RGBImage(), and ~RGBImage().
int PLearn::RGBImage::width_ [protected] |
Definition at line 107 of file RGBImage.h.
Referenced by blit(), computeAverage(), computeHistogram(), fill(), loadPPM(), removeBorders(), resize(), RGBImage(), savePPM(), and shrinkToIntersection().