void merge(const ImageOf<PixelRgb> &imgR, const ImageOf<PixelRgb> &imgL, ImageOf<PixelRgb> &out) { if (out.width()!=imgR.width()/scale) out.resize(imgR.width()/scale, imgR.height()/scale); int rr=0; for(int r=0; r<out.height(); r++) { const unsigned char *tmpR=imgR.getRow(rr); const unsigned char *tmpL=imgL.getRow(rr); unsigned char *tmpO=out.getRow(r); for(int c=0; c<out.width(); c++) { tmpO[0]=(unsigned char) (1/3.0*(tmpL[0]+tmpL[1]+tmpL[2])); tmpO[1]=(unsigned char) (1/3.0*(tmpR[0]+tmpR[1]+tmpR[2])); tmpO+=3; tmpL+=(3*scale); tmpR+=(3*scale); } rr+=scale; } }
// From iCub staticgrabber device. // DF2 bayer sequence. // -- in staticgrabber: first row GBGBGB, second row RGRGRG. // -- changed here to: first row GRGRGR, second row BGBGBG. bool TestFrameGrabber::makeSimpleBayer( ImageOf<PixelRgb>& img, ImageOf<PixelMono>& bayer) { bayer.resize(img.width(), img.height()); const int w = img.width(); const int h = img.height(); int i, j; for (i = 0; i < h; i++) { PixelRgb *row = (PixelRgb *)img.getRow(i); PixelMono *rd = (PixelMono *)bayer.getRow(i); for (j = 0; j < w; j++) { if ((i%2) == 0) { switch (j%4) { case 0: case 2: *rd++ = row->g; row++; break; case 1: case 3: *rd++ = row->r; row++; break; } } if ((i%2) == 1) { switch (j%4) { case 1: case 3: *rd++ = row->g; row++; break; case 0: case 2: *rd++ = row->b; row++; break; } } } } return true; }