//-------------------------------------------------------------------------------- unsigned char* ofxCvFloatImage::getRoiPixels(){ if(bPixelsDirty) { if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(width,height), IPL_DEPTH_8U, 1 ); } ofRectangle roi = getROI(); setImageROI(cvGrayscaleImage, roi); //make sure ROI is in sync convertFloatToGray(cvImage, cvGrayscaleImage); if(pixels == NULL) { // we need pixels, allocate it pixels = new unsigned char[(int)(roi.width*roi.height)]; pixelsWidth = roi.width; pixelsHeight = roi.height; } else if(pixelsWidth != roi.width || pixelsHeight != roi.height) { // ROI changed, reallocate pixels for new size delete pixels; pixels = new unsigned char[(int)(roi.width*roi.height)]; pixelsWidth = roi.width; pixelsHeight = roi.height; } // copy from ROI to pixels for( int i = 0; i < roi.height; i++ ) { memcpy( pixels + (int)(i*roi.width), cvGrayscaleImage->imageData + ((int)(i+roi.y)*cvGrayscaleImage->widthStep) + (int)roi.x, roi.width ); } bPixelsDirty = false; } return pixels; }
//-------------------------------------------------------------------------------- unsigned char* ofxCvFloatImage::getPixels(){ if(bPixelsDirty) { if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(width,height), IPL_DEPTH_8U, 1 ); } pushROI(); resetImageROI(cvGrayscaleImage); convertFloatToGray(cvImage, cvGrayscaleImage); popROI(); if(pixels == NULL) { // we need pixels, allocate it pixels = new unsigned char[width*height]; pixelsWidth = width; pixelsHeight = height; } else if(pixelsWidth != width || pixelsHeight != height) { // ROI changed, reallocate pixels for new size delete pixels; pixels = new unsigned char[width*height]; pixelsWidth = width; pixelsHeight = height; } // copy from ROI to pixels for( int i = 0; i < height; i++ ) { memcpy( pixels + (i*width), cvGrayscaleImage->imageData + (i*cvGrayscaleImage->widthStep), width ); } bPixelsDirty = false; } return pixels; }
//-------------------------------------------------------------------------------- IplImage* ofxCvFloatImage::getCv8BitsRoiImage() { if( !bAllocated ){ ofLog(OF_LOG_WARNING, "in getCv8BitsRoiImage, image is not allocated"); } if(bPixelsDirty) { if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(width,height), IPL_DEPTH_8U, 1 ); } ofRectangle roi = getROI(); setImageROI(cvGrayscaleImage, roi); //make sure ROI is in sync convertFloatToGray(cvImage, cvGrayscaleImage); } return cvGrayscaleImage; }