4,445
社区成员
发帖
与我相关
我的任务
分享
void rgb2cmyk( Mat &image,Mat &cmyk){
if(!image.data){
cout<<"Miss Data"<<endl;
return;
}
int nl = image.rows; //行数
int nc = image.cols; //列数
if(image.isContinuous()){ //没有额外的填补像素
nc = nc*nl;
nl = 1; //It is now a 1D array
}
//对于连续图像,本循环只执行1次
for(int i=0;i<nl;i++){
uchar *data = image.ptr<uchar>(i);
uchar *dataCMYK = cmyk.ptr<uchar>(i);
for(int j = 0;j<nc;j++){
uchar b = data[3*j];
uchar g = data[3*j+1];
uchar r = data[3*j+2];
uchar c = 255 - r;
uchar m = 255 - g;
uchar y = 255 - b;
uchar k = min(c,min(m,y));
dataCMYK[4*j] = c - k;
dataCMYK[4*j+1] = m - k;
dataCMYK[4*j+2] = y - k;
dataCMYK[4*j+3] = k;
}
}
return;
}