Форум: "Media";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
Внизсчитывание данных из bmp файла Найти похожие ветки
← →
simmoril (2003-08-03 14:51) [0]Задача состоит в считывании из bmp файла (картинка, вообще говоря, цветная) информации о яркости пикселей. Конкретнее, требуется получить прямоугольную матрицу чисел, каждое из которых будет определять только яркость соответствующего пиксела. Как будто, для чтения bmp файла надо пользоваться TCanvas.pixels[i,j].
Вопрос: как конкретизировать то, что мы хотим получить информацию именно о яркости пикселей?
← →
esVer (2003-08-03 16:55) [1]Получить RGB каждого пиксела
Перевести RGB в HSV
V - яркость
← →
simmoril (2003-08-03 18:28) [2]Большое Спасибо.
← →
Fenik (2003-08-03 18:51) [3]function BLimit(A: Integer): Byte;
begin
if A < 0 then Result := 0
else if A > 255 then Result := 255
else Result := A;
end;
...
var
Bitmap: TBitmap;
Matrix: array of array of Byte;
x, y: Integer;
p: pByteArray;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile("file.bmp");
Bitmap.PixelFormat := pf24Bit;
SetLength(Matrix, Bitmap.Height);
for y := 0 to Bitmap.Height - 1 do begin
p := Bitmap.PixelFormat[y];
SetLength(Matrix[y], Bitmap.Width);
for x := 0 to Bitmap.Width do
Matrix[y, x] := BLimit(Round((p[x*3] + p[x*3+1] + p[x*3+2])/3));
end;
finally
Bitmap.Free;
end;
end;
В Matrix то, что нужно.
За ошибки не пинать: писал без Delphi.
← →
iXuSs (2003-08-03 18:57) [4]http://www.efg2.com/Lab/Graphics/Colors/HSV.htm
← →
Fenik (2003-08-03 19:00) [5]Вот и первая ошибочка:
не
for x := 0 to Bitmap.Width do
а
for x := 0 to Bitmap.Width - 1 do
← →
simmoril (2003-08-05 18:43) [6]Что происходит в строке
p := Bitmap.PixelFormat[y];
если выводится сообщение об ошибке «Аrray type required.»
Как мне это исправить?
← →
Fenik (2003-08-05 20:03) [7]Ой блин!
Очепятка.
надо так:
p := Bitmap.ScanLine[y];
← →
pasha676 (2003-08-06 10:33) [8]p[x*3] + p[x*3+1] + p[x*3+2])/3
ЭЭЭ. Строго говоря это помоему не яркостная составляющая, а как бы средняя мощность по всем цветам. Впрочем может она и была нужна? А если нужна именно яркость - то надо перейти в другое измерение цвета (зашибись написал, но что то башка не думает о правильности терминов), где присутствует яркостная составляющая (см например предложение evSer-а, хотя в HSV я не вникал, но вроде что то около дерева). И помоему таких систем несколько. В jpg алгоритме что то подобное используется, он проще даже (тут опять память подводит).
Т.к. цвет не однозначен: 255 красного по яркости совсем не то что 255 зеленого. У каждого цвета есть еще свои весовые коэффиценты, которые определяют яркость.
← →
Fenik (2003-08-06 19:34) [9]Вот верная формула:
Matrix[y, x] := BLimit(Round((p[x*3]*0.11 + p[x*3+1]*0.59 + p[x*3+2]*0.3)/3));
← →
simmoril (2003-08-06 19:37) [10]pasha676, может это p[x*3] + p[x*3+1] + p[x*3+2])/3 и не яркостная составляющая, но в матрице те значения, которые мне нужно.
Не подскажешь, где можно прочитать про неоднозначность цвета, о которой ты говорил (желательно на русском языке)? Меня просто заинтересовала эта тема.
← →
Fenik (2003-08-06 19:44) [11]> Fenik © (06.08.03 19:34)
Точнее так:
Matrix[y, x] := BLimit(Round((p[x*3]*0.11 + p[x*3+1]*0.59 + p[x*3+2]*0.3)));
← →
simmoril (2003-08-06 20:38) [12]Большое спасибо.
← →
pasha676_* (2003-08-07 13:20) [13]Да что то в этом роде. Я брал в каком-то англоязычном журнале.
Вот только Fenic у меня сомнения по факту коэффицентов в твоей формуле и особенно их порядка.
Я конечно могу ошибаться (данной тематикой лет 5-6 уже не занимался).
Fenic не мог бы ты привести формулу вида
xR+yG+zB
Где x,y,z - коэффиценты, ну а RGB - это соответственно цвета.
← →
Fenik (2003-08-08 11:23) [14]Взял у знакомого книгу "Delpi 5 создание мультимедийных приложений". Так это оттуда:
"... Особенно хорошо воспринимается зелёный свет, красный свет воспринимается несколько хуже, а чувствительность глаза к синему свету ещё ниже. Многочисленные психологические тесты позволяют считать, что яркость вычисляется по формуле:"
L = 0.3*R + 0.59*G + 0.11*B
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c