//-------------------------------------------------------------------------------- void ofxCvFloatImage::operator = ( const ofxCvColorImage& _mom ) { // cast non-const, no worries, we will reverse any chages ofxCvColorImage& mom = const_cast<ofxCvColorImage&>(_mom); if( mom.getWidth() == 0 || mom.getHeight() == 0 ){ ofLog(OF_LOG_ERROR, "in =, mom width or height is 0"); return; } if( !bAllocated ){ ofLog(OF_LOG_NOTICE, "in =, allocating to match dimensions"); allocate(mom.getWidth(), mom.getHeight()); } if( matchingROI(getROI(), mom.getROI()) ) { if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(width,height), IPL_DEPTH_8U, 1 ); } ofRectangle roi = getROI(); setImageROI(cvGrayscaleImage, roi); cvCvtColor( mom.getCvImage(), cvGrayscaleImage, CV_RGB2GRAY ); convertGrayToFloat(cvGrayscaleImage, cvImage); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in =, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::setRoiFromPixels( const unsigned char* _pixels, int w, int h ) { if( w == 0 || h == 0 ){ ofLog(OF_LOG_ERROR, "in setFromPixels, w and h cannot = 0"); return; } if(!bAllocated){ ofLog(OF_LOG_ERROR, "in setRoiFromPixels, image is not allocated"); return; } ofRectangle roi = getROI(); ofRectangle inputROI = ofRectangle( roi.x, roi.y, w, h); ofRectangle iRoi = getIntersectionROI( roi, inputROI ); if( iRoi.width > 0 && iRoi.height > 0 ) { if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(width,height), IPL_DEPTH_8U, 1 ); } setImageROI(cvGrayscaleImage, roi); //make sure ROI is in sync // copy _pixels into cvGrayscaleImage for( int i=0; i < iRoi.height; i++ ) { memcpy( cvGrayscaleImage->imageData + ((i+(int)iRoi.y)*cvGrayscaleImage->widthStep) + (int)iRoi.x, _pixels + (i*w), (int)(iRoi.width) ); } convertGrayToFloat(cvGrayscaleImage, cvImage); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in setRoiFromPixels, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::setFromPixels( const unsigned char* _pixels, int w, int h ) { // This sets the internal image ignoring any ROI if( w == 0 || h == 0 ){ ofLog(OF_LOG_ERROR, "in setFromPixels, w and h cannot = 0"); return; } if( !bAllocated || w != width || h != height ) { ofLog(OF_LOG_NOTICE, "in setFromPixels, reallocating to match dimensions"); allocate(w,h); } if( w == width && h == height ) { ofRectangle lastROI = getROI(); if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(width,height), IPL_DEPTH_8U, 1 ); } resetImageROI(cvGrayscaleImage); // copy _pixels into cvGrayscaleImage for( int i=0; i < height; i++ ) { memcpy( cvGrayscaleImage->imageData + (i*cvGrayscaleImage->widthStep), _pixels + (i*w), width ); } convertGrayToFloat(cvGrayscaleImage, cvImage); setROI(lastROI); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in setFromPixels, size mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::addWeighted( ofxCvGrayscaleImage& mom, float f ) { if( matchingROI(getROI(), mom.getROI()) ) { convertGrayToFloat(mom.getCvImage(), cvImageTemp); cvAddWeighted( cvImageTemp, f, cvImage, 1.0f-f,0, cvImage ); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in addWeighted, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::operator = ( const ofxCvGrayscaleImage& _mom ) { // cast non-const, no worries, we will reverse any chages ofxCvGrayscaleImage& mom = const_cast<ofxCvGrayscaleImage&>(_mom); if( matchingROI(getROI(), mom.getROI()) ) { convertGrayToFloat(mom.getCvImage(), cvImage); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in =, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::addWeighted( ofxCvGrayscaleImage& mom, float f ) { if( pushSetBothToTheirIntersectionROI(*this,mom) ) { convertGrayToFloat(mom.getCvImage(), cvImageTemp); cvAddWeighted( cvImageTemp, f, cvImage, 1.0f-f,0, cvImage ); popROI(); //restore prevoius ROI mom.popROI(); //restore prevoius ROI flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in addWeighted, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::operator = ( const ofxCvGrayscaleImage& _mom ) { // cast non-const, no worries, we will reverse any chages ofxCvGrayscaleImage& mom = const_cast<ofxCvGrayscaleImage&>(_mom); if( pushSetBothToTheirIntersectionROI(*this,mom) ) { convertGrayToFloat(mom.getCvImage(), cvImage); popROI(); //restore prevoius ROI mom.popROI(); //restore prevoius ROI flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in =, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::operator = ( const ofxCvColorImage& _mom ) { // cast non-const, no worries, we will reverse any chages ofxCvColorImage& mom = const_cast<ofxCvColorImage&>(_mom); if( matchingROI(getROI(), mom.getROI()) ) { if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(width,height), IPL_DEPTH_8U, 1 ); } ofRectangle roi = getROI(); setImageROI(cvGrayscaleImage, roi); cvCvtColor( mom.getCvImage(), cvGrayscaleImage, CV_RGB2GRAY ); convertGrayToFloat(cvGrayscaleImage, cvImage); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in =, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::addWeighted( ofxCvGrayscaleImage& mom, float f ) { if( mom.getWidth() == 0 || mom.getHeight() == 0 ){ ofLog(OF_LOG_ERROR, "in addWeighted, mom width or height is 0"); return; } if( !bAllocated ){ ofLog(OF_LOG_ERROR, "in addWeighted, image is not allocated"); return; } if( matchingROI(getROI(), mom.getROI()) ) { convertGrayToFloat(mom.getCvImage(), cvImageTemp); cvAddWeighted( cvImageTemp, f, cvImage, 1.0f-f,0, cvImage ); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in addWeighted, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::operator = ( const ofxCvColorImage& _mom ) { // cast non-const, no worries, we will reverse any chages ofxCvColorImage& mom = const_cast<ofxCvColorImage&>(_mom); if( pushSetBothToTheirIntersectionROI(*this,mom) ) { if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(cvImage->width,cvImage->height), IPL_DEPTH_8U, 1 ); } cvSetImageROI(cvGrayscaleImage, cvRect(roiX,roiY,width,height)); cvCvtColor( mom.getCvImage(), cvGrayscaleImage, CV_RGB2GRAY ); convertGrayToFloat(cvGrayscaleImage, cvImage); popROI(); //restore prevoius ROI mom.popROI(); //restore prevoius ROI cvSetImageROI(cvGrayscaleImage, cvRect(roiX,roiY,width,height)); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in =, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::operator = ( const ofxCvGrayscaleImage& _mom ) { // cast non-const, no worries, we will reverse any chages ofxCvGrayscaleImage& mom = const_cast<ofxCvGrayscaleImage&>(_mom); if( mom.getWidth() == 0 || mom.getHeight() == 0 ){ ofLog(OF_LOG_ERROR, "in =, mom width or height is 0"); return; } if( !bAllocated ){ ofLog(OF_LOG_NOTICE, "in =, allocating to match dimensions"); allocate(mom.getWidth(), mom.getHeight()); } if( matchingROI(getROI(), mom.getROI()) ) { convertGrayToFloat(mom.getCvImage(), cvImage); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in =, ROI mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::setFromPixels( unsigned char* _pixels, int w, int h ) { // This sets the internal image ignoring any ROI if( w == width && h == height ) { pushROI(); if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(width,height), IPL_DEPTH_8U, 1 ); } resetImageROI(cvGrayscaleImage); // copy _pixels into cvGrayscaleImage for( int i=0; i < height; i++ ) { memcpy( cvGrayscaleImage->imageData + (i*cvGrayscaleImage->widthStep), _pixels + (i*w), width ); } convertGrayToFloat(cvGrayscaleImage, cvImage); popROI(); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in setFromPixels, size mismatch"); } }
//-------------------------------------------------------------------------------- void ofxCvFloatImage::setFromPixels( unsigned char* _pixels, int w, int h ) { if( cvGrayscaleImage == NULL ) { cvGrayscaleImage = cvCreateImage( cvSize(cvImage->width,cvImage->height), IPL_DEPTH_8U, 1 ); } cvSetImageROI(cvGrayscaleImage, cvRect(roiX,roiY,width,height)); //make sure ROI is in sync ofRectangle roi = getROI(); ofRectangle inputROI = ofRectangle( roi.x, roi.y, w, h); ofRectangle iRoi = getIntersectionROI( roi, inputROI ); if( iRoi.width > 0 && iRoi.height > 0 ) { // copy pixels from _pixels, however many we have or will fit in cvGrayscaleImage for( int i=0; i < iRoi.height; i++ ) { memcpy( cvGrayscaleImage->imageData + ((i+(int)iRoi.y)*cvGrayscaleImage->widthStep) + (int)iRoi.x, _pixels + (i*w), (int)(iRoi.width) ); } convertGrayToFloat(cvGrayscaleImage, cvImage); flagImageChanged(); } else { ofLog(OF_LOG_ERROR, "in setFromPixels, ROI mismatch"); } }