颜色空间转换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通道相差太大)

还望大家赐教。
...全文
459 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就是对的值了!
已经博主授权,源码转载自 https://pan.quark.cn/s/d4dd74027b4e 在图像处理领域中,将RGB颜色空间转换CMYK颜色空间是一项基础且关键的操作,特别是在印刷行业中具有显著的应用价值,因为CMYK模式构成了彩色印刷的标准流程。 RGB颜色模型以红、绿、蓝三种基本色光为原理,而CMYK则采用青、洋红、黄以及黑四种颜料进行色彩混合。 一个名为"RGB_to_CMYK.zip"的归档文件似乎内含了一个基于Matlab语言开发的程序,其主要功能是辅助用户将图像数据从RGB格式转换CMYK格式。 Matlab是一种功能强大的数学计算软件和数据分析平台,其环境设计特别适合执行此类图像处理任务。 借助这个程序,用户能够选取任何遵循RGB规范的图像资料,不论其文件扩展名是.png、.jpg还是.tif,只要其色彩编码符合RGB标准,均可实施转换操作。 这反映出该程序具有较高的通用性,能够兼容多种格式的图像文件。 该程序的一大特色在于其数学公式的精确度和可调节性。 这表明用户可以根据实际应用场景的需求,对色彩转换的计算方法进行个性化设置。 在RGBCMYK转换过程中,往往需要运用到诸如线性插值技术或色彩管理配置文件等复杂的色彩空间映射方法。 程序赋予用户修改这些参数的权限,从而能够实现更为细致的控制,以便适应不同的印刷环境要求或个人色彩偏好。 在色彩转换的执行环节,RGB图像中的每个像素点(包含红、绿、蓝三个色彩通道)将被重新映射到CMYK模型的四个色彩通道上。 在CMYK色彩体系里,青色(Cyan)、品红色(Magenta)、黄色(Yellow)分别对应减色法的三原色,而黑色(Key,通常简写为K)则用于强化深色表现,避免过量的青、品红及黄色混合后产生偏差较大的暗色效果。 程...

4,509

社区成员

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

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