15 #include <iCub/pf3dTrackerSupport.hpp>
19 void rgbToYuvBin(
int &R,
int &G,
int &B,
int &YBin,
int &UBin,
int &VBin)
23 Y= 0.299F *(float)R +0.587F * (
float)G + 0.114F *(float)B;
24 U= -0.147F*float(R) -0.289F*float(G) +0.436F*float(B);
27 V= ((0.615F*float(R) -0.515F*float(G)+0.100F*float(B)+0.615F*255.0F)/(2.0F*0.615F+0.1F));
34 yWarning()<<
"something's wrong with Y: "<<YBin<<
" "<<Y;
36 yWarning()<<
"something's wrong with U: "<<UBin<<
" "<<U;
38 yWarning()<<
"something's wrong with V: "<<VBin<<
" "<<V<<
" R= "<<R<<
" G= "<<G<<
" B= "<<B;
41 void rgbToYuvBinImage(IplImage *image,IplImage* transformedImage)
43 int a1,a2,r,g,b, s,t,u;
44 for(a1=0;a1<transformedImage->width;a1++)
45 for(a2=0;a2<transformedImage->height;a2++)
47 r=(((uchar*)(image->imageData + image->widthStep*a2))[a1*3+0]);
48 g=(((uchar*)(image->imageData + image->widthStep*a2))[a1*3+1]);
49 b=(((uchar*)(image->imageData + image->widthStep*a2))[a1*3+2]);
50 rgbToYuvBin(r,g,b, s,t,u);
51 (((uchar*)(transformedImage->imageData + transformedImage->widthStep*a2))[a1*3+0])=s;
52 (((uchar*)(transformedImage->imageData + transformedImage->widthStep*a2))[a1*3+1])=t;
53 (((uchar*)(transformedImage->imageData + transformedImage->widthStep*a2))[a1*3+2])=u;
58 void setPixel(
int u,
int v,
int r,
int g,
int b, IplImage *image)
61 if(u>-1&&u<image->width && v>-1&&v<image->height)
63 (((uchar*)(image->imageData + image->widthStep*v))[u*3+0])=r;
64 (((uchar*)(image->imageData + image->widthStep*v))[u*3+1])=g;
65 (((uchar*)(image->imageData + image->widthStep*v))[u*3+2])=b;
69 void fillLut(
Lut *lut)
77 rgbToYuvBin(r,g,b, y,u,v);
78 index=r*65536+g*256+b;
85 void rgbToYuvBinMatLut(
const cv::Mat& image, cv::Mat& transformedImage,
Lut *lut)
90 for(a1=0;a1<image.cols;a1++)
91 for(a2=0;a2<image.rows;a2++)
93 r=(((uchar*)(image.data + image.step*a2))[a1*3+0]);
94 g=(((uchar*)(image.data + image.step*a2))[a1*3+1]);
95 b=(((uchar*)(image.data + image.step*a2))[a1*3+2]);
96 index=r*65536+g*256+b;
97 (((uchar*)(transformedImage.data + transformedImage.step*a2))[a1*3+0])=lut[index].y;
98 (((uchar*)(transformedImage.data + transformedImage.step*a2))[a1*3+1])=lut[index].u;
99 (((uchar*)(transformedImage.data + transformedImage.step*a2))[a1*3+2])=lut[index].v;
105 void rgbToYuvBinImageLut(IplImage *image,IplImage *transformedImage,
Lut *lut)
110 for(a1=0;a1<image->width;a1++)
111 for(a2=0;a2<image->height;a2++)
113 r=(((uchar*)(image->imageData + image->widthStep*a2))[a1*3+0]);
114 g=(((uchar*)(image->imageData + image->widthStep*a2))[a1*3+1]);
115 b=(((uchar*)(image->imageData + image->widthStep*a2))[a1*3+2]);
116 index=r*65536+g*256+b;
117 (((uchar*)(transformedImage->imageData + transformedImage->widthStep*a2))[a1*3+0])=lut[index].y;
118 (((uchar*)(transformedImage->imageData + transformedImage->widthStep*a2))[a1*3+1])=lut[index].u;
119 (((uchar*)(transformedImage->imageData + transformedImage->widthStep*a2))[a1*3+2])=lut[index].v;
125 void rgbToYuvBinLut(
int &R,
int &G,
int &B,
int &YBin,
int &UBin,
int &VBin,
Lut *lut)
129 Y= 0.299F *(float)R +0.587F * (
float)G + 0.114F *(float)B;
130 U= -0.147F*float(R) -0.289F*float(G) +0.436F*float(B);
133 V= ((0.615F*float(R) -0.515F*float(G)+0.100F*float(B)+0.615F*255.0F)/(2.0F*0.615F+0.1F));
140 yWarning()<<
"something's wrong with Y: "<<YBin<<
" "<<Y;
142 yWarning()<<
"something's wrong with U: "<<UBin<<
" "<<U;
144 yWarning()<<
"something's wrong with V: "<<VBin<<
" "<<V<<
" R= "<<R<<
" G= "<<G<<
" B= "<<B;
Copyright: (C) 2009 RobotCub Consortium Authors: Matteo Taiana, Ugo Pattacini CopyPolicy: Released un...