问题描述
- 谁能给一份比较好的RGB和CMYK互相转换的算法?
- 最好是对CMYK低分辨率支持的比较好的,因为我这里要求是CMYK每种颜色都量化成8个色阶。
下面是我的代码,RGB转成CMYK后再转回来失真严重。void CMy3View::RGB2CMYK(int red int green int blue int &C int &M int &Y int &K) //RGB转CMYK
{
double cmyk;
c = (double)(255 - red) / 255;
m = (double)(255 - green) / 255;
y = (double)(255 - blue) / 255;if(c<=m&&c<=y) //k赋值为cmy的最小值 k=c;else if(m<=c&&m<=y) k=m;else k=y;if(1.0 == k) c = m = y = 0;else{ c = (c - k) / (1 - k); m = (m - k) / (1 - k); y = (y - k) / (1 - k);}C=(int)8.0*c; //不要问我为什么这里要乘8,要求就是CMYK只有8个色阶,必须得M=(int)8.0*m; //这么做Y=(int)8.0*y;K=(int)8.0*k;
}
void CMy3View::CMYK2RGB(int c int m int y int k int &r int &g int &b) //CMYK转RGB
{
r =(int)(1.0-c/8.0)*(1.0-k/8.0)*255.0 +0.5;
g =(int)(1.0 - m/8.0) * (1.0 - k/8.0) * 255.0+0.5;
b =(int)(1.0 - y/8.0) * (1.0 - k/8.0) * 255.0+0.5;
}
解决方案
我没有看你算法是怎么具体实现的,可以参考opencv的实现;cvtcolor
http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/imgproc/doc/miscellaneous_transformations.html?highlight=cvtcolor#cv2.cvtColor
解决方案二:
我记着有呢,看了一下果然没有,,这个我就不知道啦
时间: 2024-10-03 21:45:24