被骗了50块钱,在网络上赌博被骗怎么办

查看: 8410|回复: 14
如何修改图像的RGB通道或者修改色相和饱和度
在opencv 中如何修改图像的RGB通道或者修改色相和饱和度,谁能给个建议?谢谢
如何修改图像的RGB通道或者修改色相和饱和度
根据期望修改的要求,建立某种映射关系。对应转换过去就行了。
如何修改图像的RGB通道或者修改色相和饱和度
根据期望修改的要求,建立某种映射关系。对应转换过去就行了。
我也是这样理解的,但是具体怎么实施,就不会了。能不能详细点,谢谢了!
如何修改图像的RGB通道或者修改色相和饱和度
比如R, G, B三个通道相互交换,就是改变的一种;再如,伪彩色也可认为是改变图像的R, G, B三通道。
如果修改色相和饱和度的话,需要先把图像作格式转换,如HSL、或HSV格式,然后根据你的期望,按照一定的法则对应转换过去就是。
无法具体回答的原因是不知道你的期望。
如何修改图像的RGB通道或者修改色相和饱和度
我把 RGB 图像转化为 HSV 图像,改变 s (饱和度)的值,然后在相同条件下跟 photoshop 相比,有明显的色斑,效果不是很差,但也并不理想。
我想会不会有其他算法的校正,但不得而知。
如何修改图像的RGB通道或者修改色相和饱和度
楼主的意思是单独调节RGB各个通道,如让某个通道增加或者减少多少,使得图片颜色改变吗?
或者通过调整HSV各个通道,如让某个通道增加或者减少多少,从而改变图像的色调或者饱和度吗?
如果是,那么可以看看签名中提供的演示软件,提供该功能(本行为广告内容)。
houjbf 提到的色斑问题,这个与处理有关了,主要H通道的处理方式:
H & 0 时, H = H + 180
H & 180 时 H = H - 180
如何修改图像的RGB通道或者修改色相和饱和度
=&&&Loren:
对,我正是这个意思。
【思维空间】,我早看过,也下载了这个软件 《Dips V1.0》,它里边的“色调/饱和度的调整”做得就非常好,就是不知道是怎么实现的?
你提供的这个思路我回头试试,谢谢先!
如何修改图像的RGB通道或者修改色相和饱和度
有空了,我把这段源代码找到,贴出来,供大家丢砖头。
如何修改图像的RGB通道或者修改色相和饱和度
色调饱和度调节,支持ROI,源代码:
bool CMyImage::HSVAddS(IplImage *img, double dH, double dS, double dV){& & & & bool&&bResult =& & & & int& &x,& & & & int& &nV& & & & float fV& & & & int& &nH, nS, nV;& & & & float fH, fS, fV;& & & & unsigned char *pLine = NULL;& & & & unsigned char *pPixel = NULL;& & & & float *pFloatPixel = NULL;& & & & CvRect rect = cvGetImageROI(img);& & & & switch (img-&depth)& & & & {& & & & case IPL_DEPTH_8U:& & & & & & & & nH = (int) dH;& & & & & & & & nS = (int) dS;& & & & & & & & nV = (int) dV;& & & & & & & & pLine = (unsigned char*) (img-&imageData + rect.y * img-&widthStep + rect.x * img-&nChannels);& & & & & & & & for (y = 0; y & rect. y++, pLine += img-&widthStep)& & & & & & & & {& & & & & & & & & & & & for (pPixel = pLine, x = 0; x & rect. x++, pPixel += img-&nChannels)& & & & & & & & & & & & {& & & & & & & & & & & & & & & & // 色调& & & & & & & & & & & & & & & & nValue = (int) pPixel[0] + nH;& & & & & & & & & & & & & & & & if (nValue & 180)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & nValue -= 180;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & else if (nValue & 0)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & nValue += 180;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & pPixel[0] = (unsigned char) nV& & & & & & & & & & & & & & & & // 饱和度& & & & & & & & & & & & & & & & nValue = (int) pPixel[1] + nS;& & & & & & & & & & & & & & & & if (nValue & 255)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & nValue = 255;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & else if (nValue & 0)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & nValue = 0;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & pPixel[1] = (unsigned char) nV& & & & & & & & & & & & & & & & // 纯度& & & & & & & & & & & & & & & & nValue = (int) pPixel[2] + nV;& & & & & & & & & & & & & & & & if (nValue & 255)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & nValue = 255;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & else if (nValue & 0)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & nValue = 0;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & pPixel[2] = (unsigned char) nV& & & & & & & & & & & & }& & & & & & & & }& & & & & & & & bResult =& & & & & & & && & & & case IPL_DEPTH_32F:& & & & & & & & fH = (float) dH;& & & & & & & & fS = (float) dS;& & & & & & & & fV = (float) dV;& & & & & & & & pLine = (unsigned char*) (img-&imageData + rect.y * img-&widthStep + rect.x * img-&nChannels);& & & & & & & & for (y = 0; y & rect. y++, pLine += img-&widthStep)& & & & & & & & {& & & & & & & & & & & & pFloatPixel = (float*) pL& & & & & & & & & & & & for (pPixel = pLine, x = 0; x & rect. x++, pFloatPixel += img-&nChannels)& & & & & & & & & & & & {& & & & & & & & & & & & & & & & // 色调& & & & & & & & & & & & & & & & fValue = pFloatPixel[0] + fH;& & & & & & & & & & & & & & & & if (fValue & 360)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & fValue -= 360;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & else if (fValue & 0)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & fValue += 360;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & pFloatPixel[0] = fV& & & & & & & & & & & & & & & & // 饱和度& & & & & & & & & & & & & & & & fValue = pFloatPixel[1] + fS;& & & & & & & & & & & & & & & & if (fValue & 1)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & fValue = 1;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & else if (fValue & 0)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & fValue = 0;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & pFloatPixel[1] = fV& & & & & & & & & & & & & & & & // 纯度& & & & & & & & & & & & & & & & fValue = pFloatPixel[2] + fV;& & & & & & & & & & & & & & & & if (fValue & 1)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & fValue = 1;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & else if (fValue & 0)& & & & & & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & fValue = 0;& & & & & & & & & & & & & & & & }& & & & & & & & & & & & & & & & pFloatPixel[2] = fV& & & & & & & & & & & & }& & & & & & & & }& & & & & & & & & & & & & & & & bResult =& & & & & & & && & & & }& & & & return bR}// 图像色调调节bool CMyImage::ImgAdjustHSV(IplImage *src, IplImage *dst, double dH, double dS, double dV){& & & & bool&&bResult =& & & & if (src && dst)& & & & {& & & & & & & & if (src-&depth == dst-&depth &&& & & & & & & & & & & & src-&nChannels == dst-&nChannels &&& & & & & & & & & & & & src-&width == dst-&width &&& & & & & & & & & & & & src-&height == dst-&height)& & & & & & & & {& & & & & & & & & & & & int& & nCOI = cvGetImageCOI(src);& & & & & & & & & & & & CvRect rect = cvGetImageROI(src);& & & & & & & & & & & & cvSetImageCOI(src, 0);& & & & & & & & & & & & cvSetImageCOI(dst, 0);& & & & & & & & & & & & cvSetImageROI(dst, rect);& & & & & & & & & & & & // 计算 HSV& & & & & & & & & & & & cvCvtColor(src, dst, CV_BGR2HSV);& & & & & & & & & & & & // 色调调节& & & & & & & & & & & & HSVAddS(dst, dH, dS, dV);& & & & & & & & & & & & // 还原图像& & & & & & & & & & & & cvCvtColor(dst, dst, CV_HSV2BGR);& & & & & & & & & & & & // 恢复 COI& & & & & & & & & & & & cvSetImageCOI(src, nCOI);& & & & & & & & & & & & cvSetImageCOI(dst, nCOI);& & & & & & & & & & & & bResult =& & & & & & & & }& & & & }& & & & return bR}复制代码
如何修改图像的RGB通道或者修改色相和饱和度
敬佩,太感谢了!
Powered by11979人阅读
虽然若干年前就看过了关于色彩空间的介绍,但是直到今天才自己动手写代码做这件事情。虽然网络上已经有很多现成的例子,但是一则仅仅适用于浮点型的数据,另一方面,在实现上也有一些尚可优化之处。
色彩模型除了最常见的RGB以外,还有HSB、YCbCr、XYZ、Lab等。HSB一般仅仅作为图像处理过程中的临时模式,YCbCr常常用于图像的压缩处理,而XYZ则严格按照人眼对光信号的敏感度进行分布。
这里将要稍作讨论的便是Lab模型。网络上诸多的介绍都说Lab是基于XYZ的,故人们一般也只能找到XYZ和Lab之间的转换,而RGB到Lab的转换只能使用XYZ作为中间模式间接进行。可惜的是,这种现状源于误解。而在图像处理软件中(比如Photoshop),往往采用一个更为简单的算法。
我们可以先观察RGB到XYZ的转换:
[X,Y,Z] = [M] * [R,G,B]
其中M为一3x3矩阵:[M] = [0.6, 0.1805;0.2, 0.0722;0.2, 0.9505],
RGB是经过Gamma校正的色彩分量:R=g(r),G=g(g),B=g(b)。其中rgb为原始的色彩分量。
g是Gamma校正函数:当 x & 0.018 时,g(x) = 4.5318 * x当 x &= 0.018 时,g(x) = 1.099 * d^0.45 - 0.099
rgb以及RGB的取值范围则均为[0,1)。计算完成后,XYZ的取值范围则有所变化,分别是:[0, 0.9506),[0, 1),[0, 1.0890)。
以及XYZ到Lab的转换:
L = 116 * f(Y1) - 16a = 500 * (f(X1) - f(Y1))b = 200 * (f(Y1) - f(Z1))
其中f是一个类似Gamma函数的校正函数:当 x & 0.008856 时,f(x) = x^(1/3)当 x &= 0.008856 时,f(x) = ( 7.787 * x ) + ( 16 / 116 )X1、Y1、Z1分别是线性归一化之后的XYZ值,也就是说,它们的取值范围都是[0, 1)。此外,函数f的值域也和自变量一样都是[0, 1)。
计算完成后,L的取值范围[0, 100),而a和b则约为[-169, +169)和[-160, +160)。
在观察这些貌似复杂的变换之前,我们必须确定的一个假设是:在图像处理软件中,非RGB色彩数据的绝对值并不重要,重要的是他们能够尽可能准确的还原成RGB图像以显示在屏幕等相关设备上。这个假设是我们的简化得以成立的理由。
上面的从XYZ到Lab的转换乍一看起来很奇怪,但若是仔细观察,不难发现L与Y1只是一个简单的同区间映射关系,这个映射其实可有可无(如果进行了映射反而必定导致色阶丢失)。
这样,我们取得的第一个简化是:L = Y1。
接下来接着看a和b的映射过程。大家不难发现,a和b其实是一个色差信号(跟Cb和Cr的性质差不多)。至于它们的转换系数500和200,大家可以完全忘记,因为他们的值域并不符合8位整数值的表达需要。我们将会稍后计算出合适的因数,使得a和b都处在[0, 255]的范围内。
因为XYZ必须归一化转为X1Y1Z1,那么我们其实可以在转换矩阵M中作出这个修改,令每行乘以一个系数以使得每行各数之和为1:[M1] = [0.2 0.1899;0.2, 0.0722;0.5, 0.8728]
于是乎,我们得出一个半成品:L = Y1 = 0.2126 * R + 0.7152 * G + 0.0722 * Ba = Fa * (X1 - Y1) + Dab = Fb * (Y1 - Z1) + Db其中的Fx是调整值域用的系数,Dx是一个正数,用来消除a和b的负值。Fx和Dx的选取必须令a和b满足值域在[0, 255]上的分布。
接下来我们来确定Fx和Dx的值。通过M1我们很容易计算出X1-Y1的值域(极端情况)为[-86.784, +86.784),而Y1-Z1的值域则为[-204.9536, +204.9536)。于是乎,Fa的值为1.4749,Fb的值为0.6245;Da和Db则都是128。
这时,代入M1有:L = Y1 = 0.2126 * R + 0.7152 * G + 0.0722 * Ba = 1.4749 * (0.2213 * R - 0.3390 * G + 0.1177 * B) + 128b = 0.6245 * (0.1949 * R + 0.6057 * G - 0.8006 * B) + 128其中RGB和Lab的取值范围都是[0,255]。
最后的一点工作是算法的优化。我们可以将这个方程组转换成常整数乘法与移位的方式(相当于使用定点数)。为了方便阅读,我仍然将移位写为除法。
所以我们的最终结果为:
L = Y1 = (13933 * R + 46871 * G + 4732 * B) div 2^16a = 377 * (14503 * R - 22218 * G + 7714 * B) div 2^24 + 128b = 160 * (12773 * R + 39695 * G - 52468 * B) div 2^24 + 128
至于逆变换则可以用类似的方法推导出来:
设L1=L,a1=(a-128)*174,b1=(b-128)*410,有:R = L1 + (a1 * 100922 + b1 * 17790) div 2^23G = L1 - (a1 * 30176 + b1 * 1481) div 2^23B = L1 + (a1 * 1740 - b1 * 37719) div 2^23其中RGB和Lab的取值范围都是[0,255],再经过逆Gamma函数取得原始的rgb
以上的算法在Delphi中编译通过。经测试,运算得出的直方图与图片观感和我手头的Photoshop CS的结果非常相似,但也有一些幅度上的差别,且容以后慢慢细察。
当初为了寻觅一个简单的RGB直接转Lab算法而找遍网络皆不得,万不得已只好自力更生。其间虽费时一日,幸好也算略有所得。暂记于此,以利后人。其间或许难免错漏之处,还望达人不吝指点。
经转换后得到
/////////////////////////////////////////////////////////////////////////////////////////////L = Y1 = (13933 * R + 46871 * G + 4732 * B) div 2^16//a = 377 * (14503 * R - 22218 * G + 7714 * B) div 2^24 + 128//b = 160 * (12773 * R + 39695 * G - 52468 * B) div 2^24 + 128void RGB2Lab2(double R, double G, double B, double &L, double &a, double &b){&&&&& L = 0.2126007 * R + 0.7151947 * G + 0.0722046 * B;&&&&& a = 0.3258962 * R - 0.4992596 * G + 0.1733409 * B + 128;&&&&& b = 0.1218128 * R + 0.3785610 * G - 0.5003738 * B + 128;}
//R = L1 + (a1 * 100922 + b1 * 17790) div 2^23//G = L1 - (a1 * 30176 + b1 * 1481) div 2^23//B = L1 + (a1 * 1740 - b1 * 37719) div 2^23void Lab2RGB2(double L, double a, double b, double &R, double &G, double &B){&&&&& R = L + 0.0120308 * a + 0.0021207 *&&&&& G = L - 0.0035973 * a - 0.0001765 *&&&&& B = L + 0.0002074 * a - 0.0044965 *}///////////////////////////////////////////////////////////////////////////////////////////
本文来自CSDN博客,转载请标明出处:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24055次
排名:千里之外2003年1月 Delphi大版内专家分月排行榜第三
2003年1月 Delphi大版内专家分月排行榜第三
2003年1月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。打开此图片,然后“另存为” 格式选RGB格式
您的举报已经提交成功,我们将尽快处理,谢谢!
你好! 怎么说呢, 你的问题写的很详细,挺有意思, 那我也说详细一些:)
正如你所说的:"相片不管是打印还是冲印到相纸上,实际表现出来的颜色就是CMYK色...
这个要看图片什么格式。专业一点话,用PS打开,另存为你要的格式就行了。如果是RAW格式的,你用专门的软件,如佳能的DPP或通用的lightroom,或PS本身带...
双击图片用ACDSee全屏查看时,按一下鼠标中键(即滚轮),这样就切换到了窗口查看方式,然后,[工具] - [选项] ,什么也不用改,点[保存设置],退出ACD...
###人的眼睛看到的从黑到白是连续的量,是模拟量(还记得我们老式的胶卷相机吗,它拍出来的就是模拟图像);而当我们要以数字的形式(0/1代码)用计算机来表示从黑到...
答: 好想去拍孕妇照也可以的,不过在拍的过程中,尽量不要累坏自己一般在7个月的时候去拍效果比较好。
大家还关注查看: 4364|回复: 4|关注: 0
求助:怎么把得到的三维矩阵转化为rgb图像
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
用matlab进行数字图像处里,我把一个rgb图分成三个二维基量,进行dct变化,相关处理后进行重构,再叠加起来,得到一个三维矩阵,但不知道如何将该矩阵转化为rgb图像,对于灰度图有mat2gray,那rgb图呢?&&知道的前辈们能回复一下吗?谢谢啦!
<h1 style="color:# 麦片财富积分
function dct(x,y)& && &%x表示去掉dct矩阵的高频行分量,y表示去掉dct矩阵的高频列分量
a=imread('000.jpg');& &%读入图像
r=zeros(450,600);
g=zeros(450,600);
b=zeros(450,600);
r=a(1:450,1:600,1);
g=a(1:450,1:600,2);
b=a(1:450,1:600,3);
r1=dct2(r);
g1=dct2(g);
b1=dct2(b);
r2=zeros(450,600);
g2=zeros(450,600);
b2=zeros(450,600);
r2=r;g2=g;b2=b;
r2(x:450,y:600)=0;
g2(x:450,y:600)=0;
b2(x:450,y:600)=0;
r3=idct2(r2);
g3=idct2(g2);
b3=idct2(b2);
a2=zeros(450,600,3);
a2(1:450,1:600,1)=r3;
a2(1:450,1:600,2)=g3;
a2(1:450,1:600,3)=b3;
subplot(1,2,1);imshow(a);
subplot(1,2,2);imshow(a3);
<h1 style="color:# 麦片财富积分
a2得到一个三维矩阵,就是不知道怎么转化为rgb图像了
第一次发帖,发成三块了,有点弱。呵呵~
关注者: 201
这个问题比较有趣,关注
<h1 style="color:# 麦片财富积分
可以考虑使用imwrite将矩阵写入到rgb图片上
站长推荐 /3
使用MATLAB和Simulink进行软件无线电设计
Powered by

我要回帖

更多关于 网络被骗怎么把钱追回 的文章

 

随机推荐