void ofxImageTS::pixelateInv(ofPixels pixels, int pixelRatio, int X, int Y, int W, int H) { ofPixels R,G,B, Rc, Gc, Bc; pixels.resize(W,H); R = pixels.getChannel(0); G = pixels.getChannel(1); B = pixels.getChannel(2); Rc = R; Gc = G; Bc = B; int c = 0; for(int i = R.size()-1; i > 0; i--){ Rc[c] = R[i]; Gc[c] = G[i]; Bc[c] = B[i]; c++; } if(pixelRatio > 4 || pixelRatio < 0) { ofLogNotice("Pixel Ratio must be between 0 and 5"); } else { int camWidth = pixels.getWidth(); int camHeight = pixels.getHeight(); int boxWidth = pixels.getWidth()/(pow(2,pixelRatio)*10); int boxHeight = pixels.getHeight()/(pow(2,pixelRatio)*10); float tot = boxWidth*boxHeight; for (int x = 0; x < camWidth; x += boxWidth) { for (int y = 0; y < camHeight; y += boxHeight) { float Red = 0, Green = 0, Blue = 0; for (int k = 0; k < boxWidth; k++) { for (int l = 0; l < boxHeight; l++) { int index = (x + k) + (y + l) * camWidth; Red += Rc[index]; Green += Gc[index]; Blue += Bc[index]; } ofSetColor(Red/tot,Green/tot,Blue/tot); ofFill(); ofDrawRectangle(x+X, y+Y, boxWidth, boxHeight); } } } } }
void threadedOpticalFlow::calculateFlow(const ofPixels& _pixels){ lock(); // realocate if size changed since last update if(_pixels.getWidth() != width && _pixels.getHeight() != height){ width = _pixels.getWidth(); height = _pixels.getHeight(); allocateBuffers(width, height); } // deep copy of incoming pixels // asumes same values in all channels //pixelsInBack.setChannel(0, _pixels.getChannel(0)); pixelsInBack = _pixels.getChannel(0); bFlowDirty = true; condition.signal(); unlock(); }