У меня есть изображение RGB, и я хочу получить результирующее цветовое пространство cie xyY, я могу получить цветовое пространство XYZ, выполнив COLOR_BGR2XYZ, теперь мне нужно получить цветовое пространство xyY.
из здесь я получил это:
x=X/X+Y+Z
y=Y/X+Y+Z
от здесь
я получил этот код:
Mat result;
result.create(img.rows,img.cols,img.type());
cvtColor(img,result,CV_RGB2XYZ);
int nr=result.rows;
int nc=result.cols*result.channels();
// XYZ to xyY
for (int i=0;i<nr;i++)
{
for (int j=0;j<nc;j++)
{
int X=result.at<Vec3b>(i,j)[2];
int Y=result.at<Vec3b>(i,j)[1];
int Z=result.at<Vec3b>(i,j)[0];
result.at<Vec3f>(i,j)[0]=X/(X+Y+Z);
result.at<Vec3f>(i,j)[1]=Y/(X+Y+Z);
result.at<Vec3f>(i,j)[2]=Y;
}
}
это самый эффективный способсделать это?