Exemple #1
0
void testApp::process(ofFbo & fbo, ofImage & image, string name){
	fbo.begin();
	ofClear(0);
	shader.begin();
	shader.setUniformTexture("tex", cam.getTextureReference(), 0 );
	shader.setUniform2f("texSize", cam.getWidth(), cam.getHeight());
	shader.setUniform2f("size", fbo.getWidth(), fbo.getHeight());
	glBegin(GL_QUADS);
	glTexCoord2f(0, 0);
	glVertex3f(0, 0, 0);
	glTexCoord2f(fbo.getWidth(), 0);
	glVertex3f(fbo.getWidth(), 0, 0);
	glTexCoord2f(fbo.getWidth(), fbo.getHeight());
	glVertex3f(fbo.getWidth(), fbo.getHeight(), 0);
	glTexCoord2f(0,fbo.getHeight()); 
	glVertex3f(0,fbo.getHeight(), 0);
	glEnd();
	shader.end();
	
	fbo.end();
	
	TIME_SAMPLE_START(name);
	fbo.readToPixels(image.getPixelsRef());
	//image.update();
	TIME_SAMPLE_STOP(name);
	
	//image.draw(0, 0);
}
Exemple #2
0
void testApp::normalizeImage(ofImage& img, ofImage& normalized) {
	srcTracker.update(toCv(img));
	if(srcTracker.getFound()) {
		drawNormalized(srcTracker, img, srcNormalized);
		normalized.allocate(normalizedWidth, normalizedHeight, OF_IMAGE_COLOR);
		srcNormalized.readToPixels(normalized.getPixelsRef());
		normalized.update();
	} else {
		ofLogWarning() << "couldn't find the face" << endl;
	}
}
void ofxDepthImageCompressor::convertTo8BitImage(unsigned short* buf, ofImage& image){
	int nearPlane = 500;
	int farPlane = 7000;
	unsigned char* pix = image.getPixels();
    int stride = image.getPixelsRef().getNumChannels();
	for(int i = 0; i < 640*480; i++){
        //ofMap(buf[i], nearPlane, farPlane, 255, 0, true);
        unsigned char value = buf[i] == 0 ? 0 : 255 - (255 * (buf[i] - nearPlane) ) / farPlane;// + ofMap(buf[i], nearPlane, farPlane, 255, 0, true);
        for(int c = 0; c < stride; c++){
            pix[i*stride+c] = value;
        }
	}
	image.update();
}
void faceColorToTexture(ofMesh& mesh, ofImage& image)
{
	vector<ofFloatColor> &color = mesh.getColors();
	int num_face = color.size() / 3;
	
	int tex_size = ofNextPow2(ceil(sqrt(num_face)));
	
	bool arb = ofGetUsingArbTex();
	ofDisableArbTex();
	image.allocate(tex_size, tex_size, OF_IMAGE_COLOR);
	if (arb) ofEnableArbTex();
	
	mesh.clearTexCoords();
	
	image.getPixelsRef().set(0);
	
	float texel_size = (1. / image.getWidth()) * 0.5;
	
	for (int i = 0; i < num_face; i++)
	{
		int u = (i % tex_size);
		int v = (i / tex_size);
		
		ofColor c = color[i * 3];
		
		image.setColor(u, v, c);
		
		float uu = (float)u / image.getWidth() + texel_size;
		float vv = (float)v / image.getHeight() + texel_size;
		
		mesh.addTexCoord(ofVec2f(uu, vv));
		mesh.addTexCoord(ofVec2f(uu, vv));
		mesh.addTexCoord(ofVec2f(uu, vv));
	}
	
	image.update();
	mesh.clearColors();
}
void ForbiddenPlanet::drawContours(float contrast, ofImage img,float sizeMultX,float sizeMultY, ofRectangle faceBoundingBox)
{
    
    
    ofxCvGrayscaleImage faceImg;
    
    faceImg.setFromPixels(img.getPixelsRef());
    
    faceImg.brightnessContrast(0.05f,contrast);
    
    contourFinder.findContours(faceImg, 5, (340*240), 45, true);
    ofSetColor(200,0,50);
    
    for (int i = 0; i < contourFinder.nBlobs; i++){
        
        float lastX = 0;
        float lastY = 0;
        
        glBegin(GL_LINES);
        for(int j =0; j < contourFinder.blobs[i].nPts;j++)
        {
            float x = FACE_TARGET_POS_X - (faceImg.width*sizeMultX)/2+ contourFinder.blobs[i].pts[j].x * sizeMultX;
            float y = FACE_TARGET_POS_Y - (faceImg.height*sizeMultY)/2 + contourFinder.blobs[i].pts[j].y * sizeMultY;
            
            if(ofDist(lastX,lastY,x,y) < 25.0 && (int)lastX != 0 && (int)lastY != 0)
            {
                glVertex2f(x,y);
                glVertex2f(lastX,lastY);
            }
            lastX = x;
            lastY = y;
            //ofCurveVertex( contourFinder.blobs[i].pts[j].x, contourFinder.blobs[i].pts[j].y);
            
        }
        glEnd();
    }
}
//--------------------------------------------------------------
void ofxAEOverlay::setImg(ofImage & i){
    img.clear();
    img.setFromPixels(i.getPixelsRef());
    img.update();
}
//--------------------------------------------
void ofCairoRenderer::draw(ofImage & img, float x, float y, float z, float w, float h, float sx, float sy, float sw, float sh){
	ofPixelsRef raw = img.getPixelsRef();
	bool shouldCrop = sx != 0 || sy != 0 || sw != w || sh != h;
	ofPixels cropped;
	if(shouldCrop) {
		cropped.allocate(sw, sh, raw.getImageType());
		raw.cropTo(cropped, sx, sy, sw, sh);
	}
	ofPixelsRef pix = shouldCrop ? cropped : raw;

	pushMatrix();
	translate(x,y,z);
	scale(w/pix.getWidth(),h/pix.getHeight());
	cairo_surface_t *image;
	int stride=0;
	int picsize = pix.getWidth()* pix.getHeight();
	unsigned char *imgPix = pix.getPixels();

	static vector<unsigned char> swapPixels;

	switch(pix.getImageType()){
	case OF_IMAGE_COLOR:
#ifdef TARGET_LITTLE_ENDIAN
		swapPixels.resize(picsize * 4);

		for(int p= 0; p<picsize; p++) {
			swapPixels[p*4] = imgPix[p*3 +2];
			swapPixels[p*4 +1] = imgPix[p*3 +1];
			swapPixels[p*4 +2] = imgPix[p*3];
		}
#else
		swapPixels.resize(picsize * 4);

		for(int p= 0; p<picsize; p++) {
			swapPixels[p*4] = imgPix[p*3];
			swapPixels[p*4 +1] = imgPix[p*3 +1];
			swapPixels[p*4 +2] = imgPix[p*3 +2];
		}
#endif
		stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, pix.getWidth());
		image = cairo_image_surface_create_for_data(&swapPixels[0], CAIRO_FORMAT_RGB24, pix.getWidth(), pix.getHeight(), stride);
		break;
	case OF_IMAGE_COLOR_ALPHA:
#ifdef TARGET_LITTLE_ENDIAN
		swapPixels.resize(picsize * 4);

		for(int p= 0; p<picsize; p++) {
			swapPixels[p*4] = imgPix[p*4+2];
			swapPixels[p*4 +1] = imgPix[p*4+1];
			swapPixels[p*4 +2] = imgPix[p*4];
			swapPixels[p*4 +3] = imgPix[p*4+3];
		}
		stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, pix.getWidth());
		image = cairo_image_surface_create_for_data(&swapPixels[0], CAIRO_FORMAT_ARGB32, pix.getWidth(), pix.getHeight(), stride);
#else
		stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, pix.getWidth());
		image = cairo_image_surface_create_for_data(pix.getPixels(), CAIRO_FORMAT_ARGB32, pix.getWidth(), pix.getHeight(), stride);
#endif
		break;
	case OF_IMAGE_GRAYSCALE:
		swapPixels.resize(picsize * 4);

		for(int p= 0; p<picsize; p++) {
			swapPixels[p*4] = imgPix[p];
			swapPixels[p*4 +1] = imgPix[p];
			swapPixels[p*4 +2] = imgPix[p];
		}
		stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, pix.getWidth());
		image = cairo_image_surface_create_for_data(&swapPixels[0], CAIRO_FORMAT_RGB24, pix.getWidth(), pix.getHeight(), stride);
		break;
	case OF_IMAGE_UNDEFINED:
	default:
		ofLogError("ofCairoRenderer") << "draw(): trying to draw undefined image type " << pix.getImageType();
		popMatrix();
		return;
		break;
	}
	cairo_set_source_surface (cr, image, 0,0);
	cairo_paint (cr);
	cairo_surface_flush(image);
	cairo_surface_destroy (image);
	popMatrix();
}
Exemple #8
0
void ofxVectorField::setFromImage(ofImage & image) {

    int imgW = image.width;
    int imgH = image.height;
    int imgPixelCount = imgW * imgH;

    if( !bIsAllocated) {

        printf("ofxVectorField not allocated -- allocating automatically using default spacing\n");
        setup(imgW, imgH, OFX_VECFIELD_DEFALT_SPACING);
    }

    // storage for brightness
    unsigned char * imagePixels = image.getPixels();
    unsigned char brightness[imgPixelCount];

    if( image.getPixelsRef().getImageType() == OF_IMAGE_GRAYSCALE) {

        for(int x=0; x<imgW; x++) {
            for(int y=0; y<imgH; y++) {

                int srcPos = y * imgW + x;

                unsigned char b = imagePixels[srcPos];

                brightness[srcPos] = b;
            }
        }

    } else {

        // convert RGB to luma
        unsigned char * imagePixels = image.getPixels();
        unsigned char brightness[imgPixelCount];
        int bpp = image.getPixelsRef().getBytesPerPixel();

        for(int x=0; x<imgW; x++) {
            for(int y=0; y<imgH; y++) {

                int dstPos = y * imgW + x;
                int srcPos = dstPos * 3;

                unsigned char r = imagePixels[srcPos];
                unsigned char g = imagePixels[srcPos+1];
                unsigned char b = imagePixels[srcPos+2];

                brightness[dstPos] = ( r * 0.299) + (.587 * g) + (.114 * b);
            }
        }
    }

    // detetermine the vector at each position in the image

    for(int x=1; x<width-1; x++) {
        for(int y=1; y<height-1; y++) {

            int vecPos = y * width + x;
            char areaPixels[9];

            // loop through the area pixels
            for(int i=-1; i<=1; i++) {
                for(int j=-1; j<=1; j++) {

                    // determine where to read from in the area (not optimized)
                    int readPos = ((y + j) * spacing * imgW + (x + i)*spacing) * 3;

                    unsigned char R = imagePixels[readPos];
                    unsigned char G = imagePixels[readPos+1];
                    unsigned char B = imagePixels[readPos+2];

                    char BR = (0.299 * R) + (.587 * G) + (.114 * B);

                    int writePos = (j+1) * 3 + (i + 1);

                    areaPixels[writePos] = BR;
                }
            }

            float dX = (areaPixels[0] + areaPixels[3] + areaPixels[6])/3 - (areaPixels[2] + areaPixels[5] + areaPixels[8])/3;
            float dY = (areaPixels[0] + areaPixels[1] + areaPixels[2])/3 - (areaPixels[6] + areaPixels[7] + areaPixels[8])/3;

            vectorField[vecPos].x = dY;
            vectorField[vecPos].y = dX;
        }
    }

    // copy pixels to the top and bottom

    for(int x=0; x<width; x++) {

        int dstPos = x;
        int srcPos = x + width;

        vectorField[dstPos].x = vectorField[srcPos].x;
        vectorField[dstPos].y = vectorField[srcPos].y;

        dstPos = x + (height-1)*width;
        srcPos = x + (height-2)*width;

        vectorField[dstPos].x = vectorField[srcPos].x;
        vectorField[dstPos].y = vectorField[srcPos].y;
    }

    // copy pixels to the left and right sides

    for(int y=0; y<height; y++) {

        int dstPos = y * width;
        int srcPos = y * width + 1;

        vectorField[dstPos].x = vectorField[srcPos].x;
        vectorField[dstPos].y = vectorField[srcPos].y;

        dstPos = y * width + width-1;
        srcPos = y * width + width-2;

        vectorField[dstPos].x = vectorField[srcPos].x;
        vectorField[dstPos].y = vectorField[srcPos].y;
    }

    // copy pixels to the corners

    // top left
    vectorField[0].x = vectorField[width+1].x;
    vectorField[0].y = vectorField[width+1].y;

    // top right
    vectorField[width-1].x = vectorField[width+width-2].x;
    vectorField[width-1].y = vectorField[width+width-2].y;

    // bottom right
    vectorField[(height-1)*width+width-1].x = vectorField[(height-2)*width+width-2].x;
    vectorField[(height-1)*width+width-1].y = vectorField[(height-2)*width+width-2].y;

    // bottom left
    vectorField[(height-1)*width].x = vectorField[(height-2)*width+1].x;
    vectorField[(height-1)*width].y = vectorField[(height-2)*width+1].y;
}
//--------------------------------------------
void ofCairoRenderer::draw(ofImage & img, float x, float y, float z, float w, float h){
	ofPixelsRef pix = img.getPixelsRef();
	pushMatrix();
	translate(x,y,z);
	scale(w/pix.getWidth(),h/pix.getHeight());
	cairo_surface_t *image;
	int stride=0;
	int picsize = pix.getWidth()* pix.getHeight();
	unsigned char *imgPix = pix.getPixels();

	static vector<unsigned char> swapPixels;

	switch(pix.getImageType()){
	case OF_IMAGE_COLOR:
#ifdef TARGET_LITTLE_ENDIAN
		swapPixels.resize(picsize * 4);

		for(int p= 0; p<picsize; p++) {
			swapPixels[p*4] = imgPix[p*3 +2];
			swapPixels[p*4 +1] = imgPix[p*3 +1];
			swapPixels[p*4 +2] = imgPix[p*3];
		}
#else
		swapPixels.resize(picsize * 4);

		for(int p= 0; p<picsize; p++) {
			swapPixels[p*4] = imgPix[p*3];
			swapPixels[p*4 +1] = imgPix[p*3 +1];
			swapPixels[p*4 +2] = imgPix[p*3 +2];
		}
#endif
		stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, pix.getWidth());
		image = cairo_image_surface_create_for_data(&swapPixels[0], CAIRO_FORMAT_RGB24, pix.getWidth(), pix.getHeight(), stride);
		break;
	case OF_IMAGE_COLOR_ALPHA:
#ifdef TARGET_LITTLE_ENDIAN
		swapPixels.resize(picsize * 4);

		for(int p= 0; p<picsize; p++) {
			swapPixels[p*4] = imgPix[p*4+2];
			swapPixels[p*4 +1] = imgPix[p*4+1];
			swapPixels[p*4 +2] = imgPix[p*4];
			swapPixels[p*4 +3] = imgPix[p*4+3];
		}
		stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, pix.getWidth());
		image = cairo_image_surface_create_for_data(&swapPixels[0], CAIRO_FORMAT_ARGB32, pix.getWidth(), pix.getHeight(), stride);
#else
		stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, pix.getWidth());
		image = cairo_image_surface_create_for_data(pix.getPixels(), CAIRO_FORMAT_ARGB32, pix.getWidth(), pix.getHeight(), stride);
#endif
		break;
	case OF_IMAGE_GRAYSCALE:
		swapPixels.resize(picsize * 4);

		for(int p= 0; p<picsize; p++) {
			swapPixels[p*4] = imgPix[p];
			swapPixels[p*4 +1] = imgPix[p];
			swapPixels[p*4 +2] = imgPix[p];
		}
		stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, pix.getWidth());
		image = cairo_image_surface_create_for_data(&swapPixels[0], CAIRO_FORMAT_RGB24, pix.getWidth(), pix.getHeight(), stride);
		break;
	case OF_IMAGE_UNDEFINED:
		ofLog(OF_LOG_ERROR,"ofCairoRenderer: trying to render undefined type image");
		popMatrix();
		return;
		break;
	}
	cairo_set_source_surface (cr, image, 0,0);
	cairo_paint (cr);
	cairo_surface_flush(image);
	cairo_surface_destroy (image);
	popMatrix();
}
//------------------------------------------------------------------------------
void ofxIpVideoServerRoute::pushFrame(ofImage& img) {
    pushFrame(img.getPixelsRef());
}
Exemple #11
0
	void resize(ofImage& source, ofImage& destination, float xScale, float yScale, int interpolation) {
		ofImageType sourceType = source.getPixelsRef().getImageType();
		destination.allocate(source.getWidth() * xScale, source.getHeight() * yScale, sourceType);
		resize(source, destination, interpolation);
	}
Exemple #12
0
	void saveFace(FaceTrackerData& data, ofImage& img) {
		string basePath = ofGetTimestampString("%Y.%m.%d/%H.%M.%S.%i");
		data.save("metadata/" + basePath + ".face");
		imageSaver.saveImage(img.getPixelsRef(), data.getImageFilename());
	}
Exemple #13
0
void ofxJpegGlitch::setImage(ofImage &image) {
    ofSaveImage(image.getPixelsRef(), buf, OF_IMAGE_FORMAT_JPEG);
}