Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2011, 07:18   #1
Артур22
Новичок
Джуниор
 
Регистрация: 21.02.2011
Сообщений: 8
По умолчанию Определить количество точек

здравствуйте! Помогите пожалуйста решить проблему. Нужно определеить количество черных точек (пикселей) на графическом рисунке. Какие команды для этого нужно. Здесь я попытался написать примерные коды:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var x,y,z,r: real;
begin
image1.Picture.LoadFromFile('с:\tochka.jpeg');
x:=LOGPIXELSX;
y:=LOGPIXELSY;
z:=0;
for z:=0 to image1.Width do
for r:=0 to image1.Height do
if image1.Canvas.Pixels[z,r]=clblack then
 begin
   x:=z;
   y:=r;
  end;
end;
end.
и на сколько это будет точно при отсканнированном графическом рисунке

Последний раз редактировалось Артур22; 21.02.2011 в 09:42.
Артур22 вне форума Ответить с цитированием
Старый 21.02.2011, 07:32   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Участок
begin
x:=z;
y:=r;
end;
Присваивает x и y, координаты найденных точек, причём на следующем шаге итерации эти координаты заменяются новыми. Вам, как я понял, нужно подсчиталь количество точек. Тогда так:
x = x + 1;
На счёт точности - 100%.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.02.2011, 07:55   #3
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
и на сколько это будет точно при отсканнированном графическом рисунке
все до пикселя, с таким же разрешением что зделали фото, если ты его не сжимал
создаи Jpg
Код:
uses ..., Jpeg;

var
  myJpg: TJpegImage;
begin
  myJpg: TJpegImage.Create;
  myJpg.LoadFromFail('C:\A.jpg');
а потом проидись по нему циклами
а если надо что б на Image видно было, то
Код:
Image1.Picture.BitMap.Draw(0,0,myJpg);
Image1.Stretch := True;
VirusN13

Последний раз редактировалось ArtGrek; 21.02.2011 в 07:57.
ArtGrek вне форума Ответить с цитированием
Старый 21.02.2011, 08:11   #4
Артур22
Новичок
Джуниор
 
Регистрация: 21.02.2011
Сообщений: 8
По умолчанию Насчет х

Спасибо значение х=х+1; а значение y=y+1 будет так да, в общем счете сумма будет равно =x+y; тогда она будет расчитывать количество пикселей по вертикали и по горизонтали. И еще один вопрос как можно определять количество точек по отдельным секторам например клеткам из общего рисунка существуют ли для этого какие нибудь команды
Артур22 вне форума Ответить с цитированием
Старый 21.02.2011, 08:22   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Артур22 Посмотреть сообщение
Спасибо значение х=х+1; а значение y=y+1 будет так да, в общем счете сумма будет равно =x+y; тогда она будет расчитывать количество пикселей по вертикали и по горизонтали.
Нет, в данном случае она будет высчитывать x * 2.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.02.2011, 08:29   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Спасибо значение х=х+1; а значение y=y+1 будет так да, в общем счете сумма будет равно =x+y; тогда она будет расчитывать количество пикселей по вертикали и по горизонтали.
ни слова не понял
Цитата:
И еще один вопрос как можно определять количество точек по отдельным секторам например клеткам из общего рисунка существуют ли для этого какие нибудь команды
Код:
for z:=50 to 100 do
  for r:=30 to 150 do
работаеш с квадратом
Код:
50х30|---------|
        |          |
        |_______|100х150
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 21.02.2011, 08:31   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Чет намудрено с x, y, z, r
Код:
image1.Picture.LoadFromFile('с:\toc hka.jpeg');
Count:=0;
for x:=0 to image1.Width do
  for y:=0 to image1.Height do
    if image1.Canvas.Pixels[x,y]=clblack then
      Count := Count + 1;
WARNING: Отсканированная картинка (или фотка) содержит мало пикселей clBlack. Даже если пиксел очень темный и похож на черный он может и не быть таковым.
(R=0, G=0, B=0) = clBlack
(R=1, G=1, B=1) <> clBlack, но визуально не отличим

Последний раз редактировалось Sibedir; 21.02.2011 в 08:38.
Sibedir вне форума Ответить с цитированием
Старый 21.02.2011, 08:59   #8
Артур22
Новичок
Джуниор
 
Регистрация: 21.02.2011
Сообщений: 8
По умолчанию Ошибка

Вот написал но выводит такая ошибка на красно выделенном фрагменте([Error] Unit1.pas(42): For loop control variable must have ordinal type)

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Picture.LoadFromFile('C:\12.jpeg');
end;

procedure TForm1.Button2Click(Sender: TObject);
var x,y,z,r: real;
begin
x:=LOGPIXELSX;
y:=LOGPIXELSY;
for z:=image1.Width downto 0 do 
for r:=0 to image1.Height do
if image1.Canvas.Pixels[z,r]=clblack then
begin
x:=z;
x:=r;
edit1.Text:=inttostr(x);
edit1.Text:=inttostr(y);
end;
end.

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 21.02.2011 в 09:29.
Артур22 вне форума Ответить с цитированием
Старый 21.02.2011, 09:07   #9
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
var x,y,z,r: real;
integer...
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 21.02.2011, 09:18   #10
Артур22
Новичок
Джуниор
 
Регистрация: 21.02.2011
Сообщений: 8
По умолчанию

Исправил но не показывает рисунок белое окно и возникает ошибка ([Hint] Unit1.pas(40): Value assigned to 'y' never used) ([Hint] Unit1.pas(39): Value assigned to 'x' never used)

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('C:\12.bmp');
end;

procedure TForm1.Button2Click(Sender: TObject);
var x,y,z,r: integer;
begin
x:=LOGPIXELSX;
y:=LOGPIXELSY;
for z:=image1.Width downto 0 do
for r:=0 to image1.Height do
if image1.Canvas.Pixels[z,r]=clblack then
begin
x:=z;
y:=r;
edit1.Text:=inttostr(x);
edit1.Text:=inttostr(y);
end;
end;
end.

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 21.02.2011 в 09:29.
Артур22 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
количество точек в фигуре ignatka Общие вопросы C/C++ 3 03.06.2010 22:43
количество точек в фигуре (си++) @lenk@ Помощь студентам 5 24.05.2010 18:50
количество точек в фигуре @lenk@ Общие вопросы C/C++ 1 22.05.2010 20:53
определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек) kcю Помощь студентам 0 17.11.2009 19:50