社区
C++ Builder
帖子详情
请问如何调整彩色图像的亮度对比度
cabbagebai
2001-08-29 08:51:06
我用RGB转换成HSI,然后对I做线形变换,
但失真的太厉害,请问有什么解决方法吗?
...全文
345
11
打赏
收藏
请问如何调整彩色图像的亮度对比度
我用RGB转换成HSI,然后对I做线形变换, 但失真的太厉害,请问有什么解决方法吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yphy
2002-07-08
打赏
举报
回复
同灰度图像一样,只不过三个通道而已.
shally5
2001-09-02
打赏
举报
回复
这个也许你有帮助。。。。。。
我在 Microsoft 出的一本書中看到關於 HSI 色碼(含 HSV、HSL 兩種系統)轉換成 RGB 色碼的程式,可是那個程式運算的速度實在太慢了,在許多需要作大量換算的場合中都會有很明顯的延遲,不知道有沒有速度更快的轉換程式?
2001-07-27 01:17 IP: 已記錄
martin
超級管理員
註冊時間: 2001年04月
發表文章數: 195
快一點的演算法??
書上教的應該就是標準演算法了
Source Code 都在手上了嗎?
丟上來讓大家看看
看看哪裡可以省掉不必要的時間...
很快救可以幫你解決了!
__________________
Best regards
Martin Hsiao
Email: martin@msws.idv.tw
Inside Out C++Builder http://insidebcb.copystar.com.tw
Open Source United Bulletin http://www.linuxshop.idv.tw/bulletin
2001-07-27 02:12 IP: 已記錄
Stargazer
初級成員
註冊時間: 2001年05月
發表文章數: 16
嗯,這個原始碼本來是用 VB 的語法寫成的,我自己把它轉換成 C++ 的語法,檔名為 HSI.H 如下:
#ifndef __HSI__
#define __HSI__
#include
#include
#define sngMaxOf(A,B) ((A)>(B)?(A):(B))
#define sngMinOf(A,B) ((A)<(B)?(A):(B))
#define RGB2HSL 1
#define HSL2RGB 2
class ColorHSL {
private:
long mlColor;
int mR, mG, mB, mintCalc;
float mH, mS, mI;
void __fastcall letColor(long c) { mlColor=c; mR=mlColor&0xFF;
mG=(mlColor%0x100)&0xFF; mB=(mlColor%0x10000)&0xFF; CalcHSL();}
long __fastcall getColor() { if(mintCalc==RGB2HSL) CalcHSL();
else CalcRGB(); return RGB(mR, mG, mB);}
void __fastcall letH(float c) { mH=c; mintCalc=HSL2RGB;}
float __fastcall getH() { if(mintCalc==RGB2HSL) CalcHSL(); return mH;}
void __fastcall letS(float c) { mS=c; mintCalc=HSL2RGB;}
float __fastcall getS() { if(mintCalc==RGB2HSL) CalcHSL(); return mS;}
void __fastcall letI(float c) { mI=c; mintCalc=HSL2RGB;}
float __fastcall getI() { if(mintCalc==RGB2HSL) CalcHSL(); return mI;}
void CalcHSL() {
float sngMx, sngMn, sngDelta, sngPctRed, sngPctGrn, sngPctBlu;
sngPctRed=mR/255; sngPctGrn=mG/255; sngPctBlu=mB/255;
sngMx=sngMaxOf(sngMaxOf(sngPctRed, sngPctGrn), sngPctBlu);
sngMn=sngMinOf(sngMinOf(sngPctRed, sngPctGrn), sngPctBlu);
sngDelta=sngMx-sngMn; mI=(sngMx+sngMn)/2; mS=sngMx!=sngMn;
if(mI<=0.5) { if(mS>0) mS=sngDelta/(sngMx + sngMn);}
else if(mS>0) mS=sngDelta/(2-sngMx-sngMn);
if(mS) {
if(sngPctRed==sngMx) mH=(sngPctGrn-sngPctBlu)/sngDelta;
if(sngPctGrn==sngMx) mH=2+(sngPctBlu-sngPctRed)/sngDelta;
if(sngPctBlu==sngMx) mH=4+(sngPctRed-sngPctGrn)/sngDelta;
mH*=60;
}
if(mH<0) mH+=360;
mintCalc=0;
}
void CalcRGB() {
float sngM1, sngM2, sngPctRed, sngPctGrn, sngPctBlu;
sngM2=(mI<=0.5)?mI*(1+mS):(mI+mS)-mI*mS;
sngM1=2*mI-sngM2;
if(mS==0) sngPctRed=sngPctGrn=sngPctBlu=mI;
else {
sngPctRed=rgbVal(sngM1, sngM2, mH+120);
sngPctGrn=rgbVal(sngM1, sngM2, mH);
sngPctBlu=rgbVal(sngM1, sngM2, mH-120);
}
mR = 255.9999*sngPctRed;
mG = 255.9999*sngPctGrn;
mB = 255.9999*sngPctBlu;
mintCalc=0;
}
float rgbVal(float sngN1, float sngN2, float sngHue) {
if(sngHue>360) sngHue-=360;
else if(sngHue<0) sngHue+=360;
if(sngHue<60) return sngN1+(sngN2-sngN1)*sngHue/60;
else if(sngHue<180) return sngN2;
else if(sngHue<240) return sngN1+(sngN2-sngN1)*(240-sngHue)/60;
else return sngN1;
}
public:
ColorHSL() { mlColor=0;}
__property long Color={ write=letColor, read=getColor};
__property float H={ write=letH, read=getH};
__property float S={ write=letS, read=getS};
__property float I={ write=letI, read=getI};
};
#endif
註:上面文字考慮顯示上的問題,縮排使用全形空白,若要測試時請注意。
[已被 Stargazer 編輯過,在 2001-07-27 21:48]
gqxs
2001-09-02
打赏
举报
回复
关注
cabbagebai
2001-09-02
打赏
举报
回复
up
cabbagebai
2001-09-01
打赏
举报
回复
那如何再把SrcP赋给一幅新图?
我用一个TrackBar做,在OnChange事件中响应,但对一幅200*300的图就速度很慢
请问是否有什么快一些的方法
还有对比度的情况用这种方法如何做?
cabbagebai
2001-08-31
打赏
举报
回复
你这个图象是对R,G,B为8位的
如果可能是5,8,10,12,16的,怎么办?
有没有什么简单的方法,因为我用一个点一个点算的方法似乎速度很慢
HEROIN
2001-08-30
打赏
举报
回复
唉,我看不懂
xycleo
2001-08-30
打赏
举报
回复
void __stdcall AdjustLightness(Graphics::TBitmap *Bmp,int Amount)
{
int x,y;
Byte Table[255];
TRGBColor24 *SrcP;
if( Amount>0) {
for(x=0;x<=255;x++) {
Table[x]=IntToByte(x+((Amount*(x^255))>>8));
}
}
else {
for(x=0;x<=255;x++) {
Table[x]=IntToByte(x-((abs(Amount)*x)>>8));
for(y=0;y<=Bmp->Height-1;y++) {
SrcP=static_cast<TRGBColor24 *>(Bmp->ScanLine[y]);
for(x=0;x<=Bmp->Width-1;x++) {
SrcP[x].R=Table[SrcP[x].R];
SrcP[x].G=Table[SrcP[x].G];
SrcP[x].B=Table[SrcP[x].B];
}
}
}
}
}
garypeng
2001-08-29
打赏
举报
回复
那有亮度和对比度的调整算法吗?
whitelion
2001-08-29
打赏
举报
回复
学习
sundayboys
2001-08-29
打赏
举报
回复
我有锐化图像的代码,你要吗?sundayboys@21cn.com
灰度、
对比度
、
亮度
、饱和度基本图像处理源码
对于图像进行简单的灰度、
亮度
、
对比度
、色彩饱和度的调节
使用cv2.convertScaleAbs函数编写自适应
调整
彩色图像
亮度
和
对比度
的代码
cv2.convertScaleAbs函数是在OpenCV中用来对图像进行缩放和转换的函数。要使用它来自适应
调整
彩色图像
的
亮度
和
对比度
,你需要计算出图像的直方图,并使用cv2.equalizeHist函数对直方图进行均衡化。接下来,你可以使用cv2.convertScaleAbs函数来
调整
图像的
亮度
和
对比度
。 以下是一段使用cv2.convertScaleAbs函数自适应
调整
彩色图像
亮度
和
对比度
的...
Opencv图像的
亮度
和
对比度
调整
文章目录前言一、图像
亮度
和
对比度
的基本概念:1、图像
亮度
:2、图像
对比度
:二、RGB三通道色彩空间的图像变换:1、线性变换公式如下:2、操作简介:3、图像
亮度
调整
:4、图像
对比度
调整
:5、三通道图像转换为单通道图像的方法:1)通过imread方法,在后面添加参数 IMREAD_GRAYSCALE2)通过cvtColor方法,直接转换色彩空间为灰度图像,类似于创建新的图像6、图像
亮度
与
对比度
同时
调整
:三、获取图片
亮度
值总结 前言 图像的
亮度
和
对比度
调整
一、图像
亮度
和
对比度
的基本概念: 1、图像
亮度
: 图像亮
Python OpenCV
调整
图像
亮度
对比度
及RGB色彩
OpenCV提供 convertScaleAbs 函数来
调整
对比度
和
亮度
,可以直接调用该函数。根据图像宽高,设置对应的R, G, B
调整
值,完成矩阵计算。直接通过cv2库读取图像,可以读取jpg, png等格式。如果只
调整
RGB颜色通道,则可以忽略此步骤。3. 分离出图片的B,R,G颜色通道。4. 分别
调整
R, G, B通道的值。使用split函数实现颜色通道分离。2.
调整
图像
亮度
及
对比度
。
opencv
调整
图像
亮度
和
对比度
图像
亮度
以灰度图像为例,图像
亮度
指的是图像的明暗程度,图像的像素值整体越接近于255,图像越亮,反之越接近于0,图像越暗。 图像
对比度
假设灰度图像的像素值的范围为[a,b],如果b-a的值越接近于255,图像
对比度
越大,看上去图像更清晰;反之越接近于0,图像越不清晰。 修改图像的
亮度
和
对比度
OpenCV中
亮度
和
对比度
应用这个公式来修改:g(x)=αf(x)+β,其中:α(>0...
C++ Builder
13,863
社区成员
102,694
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章