Changeset 506 in cmucam
- Timestamp:
- 03/26/07 00:56:34 (5 years ago)
- Location:
- trunk/lib/cc3-ilp
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/cc3-ilp/cc3_hsv.c
r505 r506 31 31 * 32 32 */ 33 inline void cc3_rgb2hsv (cc3_pixel_t *pix)33 inline void cc3_rgb2hsv (cc3_pixel_t * pix) 34 34 { 35 uint8_t hue,sat,val; 36 uint8_t rgb_min, rgb_max; 37 rgb_max=0; 38 rgb_min=255; 39 if(pix->channel[CC3_CHANNEL_RED]>rgb_max) rgb_max=pix->channel[CC3_CHANNEL_RED]; 40 if(pix->channel[CC3_CHANNEL_GREEN]>rgb_max) rgb_max=pix->channel[CC3_CHANNEL_GREEN]; 41 if(pix->channel[CC3_CHANNEL_BLUE]>rgb_max) rgb_max=pix->channel[CC3_CHANNEL_BLUE]; 42 if(pix->channel[CC3_CHANNEL_RED]<rgb_min) rgb_min=pix->channel[CC3_CHANNEL_RED]; 43 if(pix->channel[CC3_CHANNEL_GREEN]<rgb_min) rgb_min=pix->channel[CC3_CHANNEL_GREEN]; 44 if(pix->channel[CC3_CHANNEL_BLUE]<rgb_min) rgb_min=pix->channel[CC3_CHANNEL_BLUE]; 35 uint8_t hue, sat, val; 36 uint8_t rgb_min, rgb_max; 37 rgb_max = 0; 38 rgb_min = 255; 39 if (pix->channel[CC3_CHANNEL_RED] > rgb_max) 40 rgb_max = pix->channel[CC3_CHANNEL_RED]; 41 if (pix->channel[CC3_CHANNEL_GREEN] > rgb_max) 42 rgb_max = pix->channel[CC3_CHANNEL_GREEN]; 43 if (pix->channel[CC3_CHANNEL_BLUE] > rgb_max) 44 rgb_max = pix->channel[CC3_CHANNEL_BLUE]; 45 if (pix->channel[CC3_CHANNEL_RED] < rgb_min) 46 rgb_min = pix->channel[CC3_CHANNEL_RED]; 47 if (pix->channel[CC3_CHANNEL_GREEN] < rgb_min) 48 rgb_min = pix->channel[CC3_CHANNEL_GREEN]; 49 if (pix->channel[CC3_CHANNEL_BLUE] < rgb_min) 50 rgb_min = pix->channel[CC3_CHANNEL_BLUE]; 45 51 46 52 // compute V 47 val = rgb_max;48 if (val == 0) {53 val = rgb_max; 54 if (val == 0) { 49 55 hue = sat = 0; 50 pix->channel[CC3_CHANNEL_HUE] =0;51 pix->channel[CC3_CHANNEL_SAT] =0;52 pix->channel[CC3_CHANNEL_VAL] =val;56 pix->channel[CC3_CHANNEL_HUE] = 0; 57 pix->channel[CC3_CHANNEL_SAT] = 0; 58 pix->channel[CC3_CHANNEL_VAL] = val; 53 59 return; 60 } 61 62 // compute S 63 sat = 255 * (rgb_max - rgb_min) / val; 64 if (sat == 0) { 65 pix->channel[CC3_CHANNEL_HUE] = 0; 66 pix->channel[CC3_CHANNEL_SAT] = 0; 67 pix->channel[CC3_CHANNEL_VAL] = val; 68 return; 69 } 70 71 // compute H 72 if (rgb_max == pix->channel[CC3_CHANNEL_RED]) { 73 hue = 74 0 + 43 * (pix->channel[CC3_CHANNEL_GREEN] - 75 pix->channel[CC3_CHANNEL_BLUE]) / (rgb_max - rgb_min); 76 } 77 else if (rgb_max == pix->channel[CC3_CHANNEL_GREEN]) { 78 hue = 79 85 + 43 * (pix->channel[CC3_CHANNEL_BLUE] - 80 pix->channel[CC3_CHANNEL_RED]) / (rgb_max - rgb_min); 81 } 82 else { /* rgb_max == blue */ 83 84 hue = 85 171 + 43 * (pix->channel[CC3_CHANNEL_RED] - 86 pix->channel[CC3_CHANNEL_GREEN]) / (rgb_max - rgb_min); 87 } 88 pix->channel[CC3_CHANNEL_HUE] = hue; 89 pix->channel[CC3_CHANNEL_SAT] = sat; 90 pix->channel[CC3_CHANNEL_VAL] = val; 54 91 } 55 92 56 // compute S 57 sat = 255*(rgb_max - rgb_min)/val; 58 if (sat == 0) { 59 pix->channel[CC3_CHANNEL_HUE]=0; 60 pix->channel[CC3_CHANNEL_SAT]=0; 61 pix->channel[CC3_CHANNEL_VAL]=val; 62 return; 63 } 93 void cc3_rgb2hsv_row (cc3_pixel_t * pix, uint16_t size) 94 { 95 uint16_t i; 64 96 65 // compute H 66 if (rgb_max == pix->channel[CC3_CHANNEL_RED]) { 67 hue = 0 + 43*(pix->channel[CC3_CHANNEL_GREEN] - pix->channel[CC3_CHANNEL_BLUE])/(rgb_max - rgb_min); 68 } else if (rgb_max == pix->channel[CC3_CHANNEL_GREEN]) { 69 hue = 85 + 43*(pix->channel[CC3_CHANNEL_BLUE] - pix->channel[CC3_CHANNEL_RED])/(rgb_max - rgb_min); 70 } else /* rgb_max == blue */ { 71 hue = 171 + 43*(pix->channel[CC3_CHANNEL_RED] - pix->channel[CC3_CHANNEL_GREEN])/(rgb_max - rgb_min); 72 } 73 pix->channel[CC3_CHANNEL_HUE]=hue; 74 pix->channel[CC3_CHANNEL_SAT]=sat; 75 pix->channel[CC3_CHANNEL_VAL]=val; 76 } 77 78 void cc3_rgb2hsv_row(cc3_pixel_t *pix, uint16_t size) 79 { 80 uint16_t i; 81 82 for(i=0; i<size; i++ ) 83 cc3_rgb2hsv(&pix[i]); 97 for (i = 0; i < size; i++) 98 cc3_rgb2hsv (&pix[i]); 84 99 85 100 } 86 87 -
trunk/lib/cc3-ilp/cc3_hsv.h
r504 r506 25 25 26 26 27 inline void cc3_rgb2hsv (cc3_pixel_t *pix);28 void cc3_rgb2hsv_row (cc3_pixel_t *pix, uint16_t size);27 inline void cc3_rgb2hsv (cc3_pixel_t * pix); 28 void cc3_rgb2hsv_row (cc3_pixel_t * pix, uint16_t size); 29 29 30 30 #endif
Note: See TracChangeset
for help on using the changeset viewer.
