Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > определить количество(горизонтальных) пикселей


Автор: kolli 20.1.2007, 13:10
Как определить количество(горизонтальных) пикселей в горизонтальной прямой изображенной на рисунке 

Автор: gambit 20.1.2007, 13:26
Может я тупой, но я не понял вопрос.
1 Кто проводит линию?
2 Если линия это часть рисунка, то тебе ее сначало надо распознать.
А если тебе удалось написать прогу распознования рисунка, то определить кол-во пикселей для тебя не проблема.

Автор: kolli 20.1.2007, 14:08
Есть уже готовое изображения рисунка(откройте paint и проведите прямую),где проведенна прямая.Как програмно определить колличество пикселей этой прямой.т.е  длину прямой.

Автор: W4FhLF 20.1.2007, 14:29
Найти координаты начала прямой, найти координаты конца прямой.  От конца вычесть начало. 

Автор: kolli 20.1.2007, 14:33
А как найти координаты начала прямой и  найти координаты конца прямой?

Автор: W4FhLF 20.1.2007, 14:50
Зная цвет и толщину линии просто пройтись попиксельно по изображению и проверить цвета пикселей. Ну это учитывая, что у тебя простое чёрно-белое изображение. 

Автор: drkot 20.1.2007, 15:37
W4FhLF, это весьма "тупой" и ненадежный способ. Так и непонял как после этого вобще линия получится?

Решить такую задачу исключительно алгоритмически очень сложно. и копать надо в сторону OCR.

из более простых методов:
1) определить точку начала линии (ткнуть мышкой, либо используя статистику окресности методом перебота);
2) определить точку конца линии (ткнуть мышкой, либо используя статистику окресности двигаться вдоль линии до момента входа статистики за пределы допусков);

Это в общем виде, реальзация хоть и не сложна, но и не проста. Лучше мышкой.


ЗЫЖ меня честно говоря удивляют люди которые хотят решить математически сложную задачу не имея даже представления об этой задаче (возможно и образования).

For moderators: этот вопрос явно из раздела алгоритмов.

Автор: Sunvas 20.1.2007, 15:39
Цитата(W4FhLF @  20.1.2007,  14:29 Найти цитируемый пост)
Найти координаты начала прямой, найти координаты конца прямой.  От конца вычесть начало. 

А если линия обрывается?
Цитата(kolli @  20.1.2007,  13:10 Найти цитируемый пост)
Как определить количество(горизонтальных) пикселей в горизонтальной прямой изображенной на рисунке 

Дай более точную характеристику: это "тупо" черная линия на белом фоне или на изображении чего-либо? Она прямая или нарисоавана под углом? Она одна или их несколько? Какова ее толщина?

Автор: kolli 20.1.2007, 15:55
Почему выдает ошибку в  for i := 0 to BytesPerPixel - 1 do
-------------------------------------------------------
[Error] Unit1.pas(44): Undeclared identifier: 'BytesPerPixel'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
-------------------------------------------------------------
сравнения два изображения:

Код

procedure TForm1.Button1Click(Sender: TObject);
 var
   b1, b2: TBitmap;
   c1, c2: PByte;
   x, y, i,
   different: Integer; // Counter for different pixels 
begin
   b1 := Image1.Picture.Bitmap;
   b2 := Image2.Picture.Bitmap;
   Assert(b1.PixelFormat = b2.PixelFormat); // they have to be equal 
  different := 0;
   for y := 0 to b1.Height - 1 do
   begin
     c1 := b1.Scanline[y];
     c2 := b2.Scanline[y];
     for x := 0 to b1.Width - 1 do
       for i := 0 to BytesPerPixel - 1 do // 1, to 4, dep. on pixelformat 
      begin
         Inc(different, Integer(c1^ <> c2^));
         Inc(c1);
         Inc(c2);
       end;
   end;
 end;

Автор: drkot 20.1.2007, 16:00
Цитата(kolli @  20.1.2007,  15:55 Найти цитируемый пост)
BytesPerPixel

неописанный идентификатор
Учись читать smile 

Автор: kolli 20.1.2007, 16:31
я это превел,неописанный идентификатор.А как его описать?В исходнике нет.Как я понял он определяет байт в пикселе.

Автор: drkot 20.1.2007, 16:47
Если это стандартная функция то ищи в каком модуле она оприсана.

Автор: uvita 19.5.2007, 21:06
У меня тоже выдает ошибку, может раз нас уже двое все-таки подскажите smile 

P.S. Я нашла подобный пример и там BytesPerPixel = 4, но так у меня тоже не run

Автор: drkot 19.5.2007, 21:21
Ну и в чем проблема?

Автор: uvita 20.5.2007, 13:01
Уже нет проблемы, вернее есть..., но другая как искать не различия, а сходства?

Автор: drkot 20.5.2007, 13:22
Создай новую тему. И детально опиши задачу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)