![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как найти нужный участок в битмапе [D7, Win2k, WinXP]
BMP © (2004-09-04 22:24:00)Имеется витмап и необходимо найти в нём определённые участки соответствующие другому изображению меньшего размера. Т.е. на большой битмап наложены несколько мелких, необходимо найти каких и в каком месте, совподение получается полное, как лучше всего это сделать?
Graff (2004-09-18 22:37:00) [1]Все это конечно хорошо. Но если надо найти на битмапе изображение, которое не совпадает по масштабу с тем которое наложено. Возникает вопрос как действовать тогда? Для этого надо раскладывать в спектр. С помощью БПФ (Быстрое преобразование Фурье). Более подробную информацию можно найти в справочнике по ВМ.
Рыба (2004-09-07 19:51:00) [2]Точнее вот эту статью
http://www.delphimaster.ru/articles/pixels/index.html
Рыба (2004-09-07 19:49:00) [3]>BMP
Почитай http://www.delphimaster.ru/articles3.html
Можно сделать очень быстрый поиск, только подумай чуток.
Рыба (2004-09-07 19:28:00) [4]>Multy (07.09.04 14:35) [15]
>Текст это тоже массив
Ну и что? Как передать ByteArray в качестве текста для Pos?
Multy (2004-09-07 14:35:00) [5]Текст это тоже массив
Рыба (2004-09-07 13:09:00) [6]> BMP (06.09.04 23:41) [13]
А Pos разве не для текста?
BMP (2004-09-06 23:41:00) [7]Зачем к стате писать собственный алгоритм поиска строки в подстроке?
функция System.Pos как раз одну из вариаций и реализует. Тем более, что она написана на асме, так что быстрее сделать всяко не получится.
Анонимщик (2004-09-06 11:51:00) [8]В зависимости от задачи можно поступать по-разному. Если известно, где искать, то поиск подстрок лишний. Если изображений много и искать приходится часто, то лучше сразу, при добавлении рисунка в список, вычислять какую-нибудь хеш-функцию и т.п. Так что конкретная задача важна.
Alpon (2004-09-06 10:05:00) [9]а зачем такое понадобилось делать?
BMP (2004-09-05 22:54:00) [10]А какой из алгоритмов самый эффективный по скорости?
Того же Боуэра-Мура несколь способов реализвции нащёл.
Ермак (2004-09-05 11:53:00) [11]Получи доступ к памяти битмапа (как, не помню, вопрос мастерам-компонентникам). А затем возьми первую строчку искомого рисунка и ищи ее по алгоритмам поиска подстроки в строке (Боуэра-Мура, например, да и простой сойдет). Если она нашлась, то проверяем те строчки, которые лежат под ней. Повторяем так для каждой картинки. Этот алгоритм будет работать ОЧЕНЬ БЫСТРО, в отличие от предложенных.
Profi (2004-09-05 02:43:00) [12]BMP (05.09.04 2:38) [7]
Не за что!
BMP (2004-09-05 02:38:00) [13]Спасибо Profi за ответ, а то я что то совсем затормозил, конечно же Pixels :-), слишком давно не занимался графикой...
Profi (2004-09-05 02:20:00) [14]Profi © (05.09.04 2:17) [5]
Упс! Первые четыре строки должны быть:
for j:=0 to BigBmp.height-SmollBmp.height do begin
for i:=0 to bigbmp.width-smollbmp.width do begin
for j1:=0 to smollbmp.height do begin
for i1:=0 to smollbmp.width do begin
Profi (2004-09-05 02:17:00) [15]BMP (05.09.04 1:42) [2]
Примерно так
aga:=true;
for j:=0 to BigBmp.width-SmollBmp.width do begin
for i:=0 to bigbmp.height-smollbmp.height do begin
for j1:=0 to smollbmp.width do begin
for i1:=0 to smollbmp.height do begin
if smollbmp.canvas.pixel[i1,j1]<>bigbmp.canvas.pixel[i+i1,j+j1] then begin
aga:=false;
break;
end;
end;
if not aga then break;
end;
end;
end;
if aga then showmassege('Маленькое изображение присутствует в большом!');
Gero (2004-09-05 02:02:00) [16]
> А нельзя ли по конкретнее какими функциями пользоватся
TCanvas. Правда, это не функция, но все же.
BMP (2004-09-05 01:43:00) [17]Т.е. как получить пикскль из битмапа?
Сорри за ламерский вопрос.
BMP (2004-09-05 01:42:00) [18]Это и так понятно.
А нельзя ли по конкретнее какими функциями пользоватся, если можно, с примерами, а то забыл всё.
Profi (2004-09-04 22:31:00) [19]BMP (04.09.04 22:24)
Проверяй попиксельно!