颜色空间转换RGB to CMYK

Solomon1588 2015-02-12 12:16:09
如题,我按照一篇文章的公式编写了rgb2cmyk程序,发现效果不好,请问有大神能找出我的程序哪里有问题吗?



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;
}


计算出来的效果是这样的,与论文中的效果相去甚远。

My rgb2cmyk



论文中的效果(主要是C、M、Y通道相差太大)

还望大家赐教。
...全文
404 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
狒狒空空 2015-06-19
  • 打赏
  • 举报
回复
Mat &image,Mat &cmyk数据类型要一致!
Trent1985 2015-06-12
  • 打赏
  • 举报
回复
dataCMYK[4*j] = c - k; dataCMYK[4*j+1] = m - k; dataCMYK[4*j+2] = y - k; dataCMYK[4*j+3] = k; 你的公式有问题,这个不需要,之前计算的cmyk就是对的值了!

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧