Example #1
0
COLORREF CPaletteLinear::Color(_double v)
{
  color_map::iterator it;
  triplet q;

  assert(items.size());

  //
  it = (items.size() > 1) ? items.lower_bound(v) : items.begin();

  if (it == items.begin())
  {
    q = items.begin()->second;
  }
  else
  if (it == items.end())
  {
    q = it->second;
  }
  else
  {
    _double    v1   = it->first;
    triplet & more = it->second; it--;
    _double    v0   = it->first;
    triplet & less = it->second;
  
    _double f = (v - v0)/(v1 - v0);
    q.a = less.a + f * (more.a - less.a);
    q.b = less.b + f * (more.b - less.b);
    q.c = less.c + f * (more.c - less.c);
  }

  return hsv ? FromHSV(q.a,q.b,q.c) : FromRGB(q.a,q.b,q.c);
}
static void CombineChannels( GenericImage<P>& img, int colorSpace, const String& baseId,
                             const Rect& r,
                             const GenericImage<P0>* src0, const GenericImage<P1>* src1, const GenericImage<P2>* src2 )
{
   bool allChannels = src0 != 0 && src1 != 0 && src2 != 0;

   typename P::sample* R = img.PixelData( 0 );
   typename P::sample* G = img.PixelData( 1 );
   typename P::sample* B = img.PixelData( 2 );

   const RGBColorSystem& rgbws = img.RGBWorkingSpace();

   for ( int y = r.y0; y < r.y1; ++y )
   {
      const typename P0::sample* data0 = (src0 != 0) ? src0->PixelAddress( r.x0, y ) : 0;
      const typename P1::sample* data1 = (src1 != 0) ? src1->PixelAddress( r.x0, y ) : 0;
      const typename P2::sample* data2 = (src2 != 0) ? src2->PixelAddress( r.x0, y ) : 0;

      for ( int x = r.x0; x < r.x1; ++x, ++img.Status() )
      {
         if ( colorSpace == ColorSpaceId::RGB )
         {
            if ( data0 != 0 )
               P0::FromSample( *R++, *data0++ );
            if ( data1 != 0 )
               P1::FromSample( *G++, *data1++ );
            if ( data2 != 0 )
               P2::FromSample( *B++, *data2++ );
         }
         else
         {
            RGBColorSystem::sample ch0, ch1, ch2;
            RGBColorSystem::sample r, g, b;

            if ( !allChannels )
            {
               P::FromSample( r, *R );
               P::FromSample( g, *G );
               P::FromSample( b, *B );

               FromRGB( colorSpace, rgbws, ch0, ch1, ch2, r, g, b );
            }

            if ( data0 != 0 )
               P0::FromSample( ch0, *data0++ );
            if ( data1 != 0 )
               P1::FromSample( ch1, *data1++ );
            if ( data2 != 0 )
               P2::FromSample( ch2, *data2++ );

            ToRGB( colorSpace, rgbws, r, g, b, ch0, ch1, ch2 );

            *R++ = P::ToSample( r );
            *G++ = P::ToSample( g );
            *B++ = P::ToSample( b );
         }
      }
   }
}
Example #3
0
COLORREF CPaletteLinear::FromHSV(_double h, _double s, _double v)
{
	uint   n;
  _double f;
  _double vs, vsf;

	if (s == 0) // gray
		return FromRGB(v,v,v);

	h  *= 6;
  n   = floor(h);
  f   = h - n;
  vs  = v * s;
  vsf = vs * f;

  switch (n)
  {
  case 0:  return FromRGB(v,       v-vs+vsf, v-vs);
  case 1:  return FromRGB(v-vsf,   v,        v-vs);
  case 2:  return FromRGB(v-vs,    v,        v-vs+vsf);
  case 3:  return FromRGB(v-vs,    v-vsf,    v);
  case 4:  return FromRGB(v-vs+vsf,v-vs,     v);
  default: return FromRGB(v,       v-vs,     v-vsf);
  }
}
Example #4
0
void Color::FromHSV(float h, float s, float v) {
	h = fmod(h, 360);
	float chroma = v * s;
	float hPrime = h / 60.0;
	float X = chroma * (1.0 - fabs(fmod(hPrime, 2) - 1));

	float r1, g1, b1;

	if (0 <= hPrime && hPrime < 1) {
		r1 = chroma;
		g1 = X;
		b1 = 0;
	} else if (1 <= hPrime && hPrime < 2) {
		r1 = X;
		g1 = chroma;
		b1 = 0;
	} else if (2 <= hPrime && hPrime < 3) {
		r1 = 0;
		g1 = chroma;
		b1 = X;
	} else if (3 <= hPrime && hPrime < 4) {
		r1 = 0;
		g1 = X;
		b1 = chroma;
	} else if (4 <= hPrime && hPrime < 5) {
		r1 = X;
		g1 = 0;
		b1 = chroma;
	} else if (5 <= hPrime && hPrime < 6) {
		r1 = chroma;
		g1 = 0;
		b1 = X;
	}

	float m = v - chroma;
	FromRGB(255 * (r1 + m), 255 * (g1 + m), 255 * (b1 + m));
}
Example #5
0
void Color::FromRGB(RGB newColor) {
	FromRGB(newColor.r, newColor.g, newColor.b);
}
Example #6
0
Color::Color(uint8_t r, uint8_t g, uint8_t b) {
	FromRGB(r, g, b);
}
Example #7
0
Color::Color(RGB newColor) {
	FromRGB(newColor);
}
Example #8
0
void* Run(void*)
{
  int size = ivWidth*ivHeight;
    
  // Initialize MultiObjectTLD
  #if LOADCLASSIFIERATSTART
  MultiObjectTLD p = MultiObjectTLD::loadClassifier((char*)CLASSIFIERFILENAME);
  #else
  MOTLDSettings settings(COLOR_MODE_RGB);
  settings.useColor = false;
  MultiObjectTLD p(ivWidth, ivHeight, settings);
  #endif
  
  Matrix maRed;
  Matrix maGreen;
  Matrix maBlue;
  unsigned char img[size*3];
  #ifdef FORCE_RESIZING
  CvSize wsize = {ivWidth, ivHeight};
  IplImage* frame = cvCreateImage(wsize, IPL_DEPTH_8U, 3);
  #endif
  while(!ivQuit)
  {    
    /*
    if(reset){
      p = *(new MultiObjectTLD(ivWidth, ivHeight, COLOR_MODE_RGB));
      reset = false;
    }
    if(load){
      p = MultiObjectTLD::loadClassifier(CLASSIFIERFILENAME);
      load = false;
    }
    */
    
    // Grab an image
    if(!cvGrabFrame(capture)){
      std::cout << "error grabbing frame" << std::endl;
      break;
    }
    #ifdef FORCE_RESIZING
    IplImage* capframe = cvRetrieveFrame(capture);
    cvResize(capframe, frame);
    #else
    IplImage* frame = cvRetrieveFrame(capture);
    #endif
    for(int j = 0; j<size; j++){
      img[j] = frame->imageData[j*3+2];
      img[j+size] = frame->imageData[j*3+1];
      img[j+2*size] = frame->imageData[j*3];
    }
    
    // Process it with motld
    p.processFrame(img);
    
    // Add new box
    if(mouseMode == MOUSE_MODE_ADD_BOX){
      p.addObject(mouseBox);
      mouseMode = MOUSE_MODE_IDLE;
    }
    
    // Display result
    HandleInput();
    p.getDebugImage(img, maRed, maGreen, maBlue, drawMode);    
    FromRGB(maRed, maGreen, maBlue);
    cvShowImage("MOCTLD", curImage);
    p.enableLearning(learningEnabled);
    if(save){
      p.saveClassifier((char*)CLASSIFIERFILENAME);
      save = false;
    }
  }
  //delete[] img;
  cvReleaseCapture(&capture);
  return 0;
}