我已经将jpg图象转换成了RBG值的矩阵,我想区分两个图象,并对他们进行分类.即两张图象对应象素点相减的总和,得到redrbg,greenrbg,bluerbg3个值.我分类的主要思想是把前面3个值除以图片象素总和,得到一个0--1地小数,若在0--0.1之间为1类,0.1--0.2之间为2类.........总共为10个类.但是相除时如何体现两张图片的差异呢?我的两种方法觉得都不好:
1.(redrbg+greenrbg+bluerbg)/3*象素总和 {乘以3是因为对r,g,b3个形式}
2.redrbg/象素总和+reenrbg/象素总和+bluerbg/象素总和
请问高手有什么更好的方法,是不是要用到16进制表示的方法:000000--FFFFFF才行?
分不够还可以再加!急求
1.(redrbg+greenrbg+bluerbg)/3*象素总和 {乘以3是因为对r,g,b3个形式}
2.redrbg/象素总和+reenrbg/象素总和+bluerbg/象素总和
请问高手有什么更好的方法,是不是要用到16进制表示的方法:000000--FFFFFF才行?
分不够还可以再加!急求
解决方案 »
- 如何访问一个进程的内存空间
- StringGrid问题!急!急
- 老之!!!!来拿分
- delphi5下chart里的series怎么加进去两个事件,MouseEnter ,MouseLeave
- 一个关于多线程的问题,大家过来看看!!
- 谁有有关Delphi和XML编程的列子,高分相求!希望大家帮忙!!!(急!!!!!)
- 关于对象的奇怪问题,请高手看一下,多谢了
- 特急!!!晴格格的问题(关于文字COPY)
- 请教高手!!如何取得directorylistbox的目录路径值到一个文本框!!
- 为什么delphi的query中执行sql语句的速度如此之慢!!!!!!
- 新手想咨询的一个问题,请大家都进来看看。在线等待.
- 本人初学delphi,哪位高手帮助解决一下
2。至于你说的类我看不明白,就是分出来了以后,你能说说这个类到底在表示什么含义?
你处理的是不是同一张图片,而色彩的包和度不同?
我是通过类来体现两个相邻帧的区别大小,区别越大就越靠近1。我愿意出高分解决这个问题!谢谢大家快点给我解决吧!要我做什么力所能及的都可以!
http://expert.csdn.net/Expert/topic/1472/1472478.xml?temp=.9072382
建议你先拜读这2个帖子,再回来看看你这个问题.
用ScanLine应该比用Pixel快了许多,你要做的无非就是在红,绿,蓝那里添加你想要做什么
至于你做的方法我实在看不明白,算法自己想好了.Image1.Picture.Bitmap.PixelFormats=pf24bit
procedure Grayscale(const Bitmap:TBitmap);
var
X: Integer;
Y: Integer;
PRGB: pRGBTriple;
Gray: Byte;
begin
for Y := 0 to (Bitmap.Height - 1) do
begin
PRGB := Bitmap.ScanLine[Y];
for X := 0 to (Bitmap.Width - 1) do
begin
//PRGB^.rgbtRed:=Gray;
// PRGB^.rgbtGreen:=Gray; /添加你的代码
//PRGB^.rgbtBlue:=Gray;
Inc(PRGB);
end;
end;
end;
var
red,green,blue:real;
imgrgb0,imgrgbx:TRGBArray;
begin
red:=0; green:=0; blue:=0;
if adotable1.number=1 then
rgbchange(ImgRGB0)
else begin
rgbchange(ImgRGBx);
n:=0;
for i:=0 to image1.Picture.Height-1 do
for j:=0 to image1.Picture.Width-1 do
begin
red:=ImgRGBx[n].rgbtRed-ImgRGB0[n].rgbtRed+red;
green:=ImgRGBx[n].rgbtGreen-ImgRGB0[n].rgbtGreen+green;
blue:=ImgRGBx[n].rgbtBlue-ImgRGB0[n].rgbtBlue+blue;
inc(n);
end;
.......................未写完!
设3个权值a,b,c。那么两帧间差异为:Dk=(a*red + b*blue + c*green)/256*height*width
其中heigh 和width表示图片长宽。
不知这样行否?
red:=abs(ImgRGBx[n].rgbtRed-ImgRGB0[n].rgbtRed)+red;
green:=Iabs(mgRGBx[n].rgbtGreen-ImgRGB0[n].rgbtGreen)+green;
blue:=abs(ImgRGBx[n].rgbtBlue-ImgRGB0[n].rgbtBlue)+blue;
上面的rgbchange我没有显示代码!