Форум: "Media";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизКак найти нужный участок в битмапе Найти похожие ветки
← →
BMP (2004-09-04 22:24) [0]Имеется витмап и необходимо найти в нём определённые участки соответствующие другому изображению меньшего размера. Т.е. на большой битмап наложены несколько мелких, необходимо найти каких и в каком месте, совподение получается полное, как лучше всего это сделать?
← →
Profi © (2004-09-04 22:31) [1]BMP (04.09.04 22:24)
Проверяй попиксельно!
← →
BMP (2004-09-05 01:42) [2]Это и так понятно.
А нельзя ли по конкретнее какими функциями пользоватся, если можно, с примерами, а то забыл всё.
← →
BMP (2004-09-05 01:43) [3]Т.е. как получить пикскль из битмапа?
Сорри за ламерский вопрос.
← →
Gero © (2004-09-05 02:02) [4]
> А нельзя ли по конкретнее какими функциями пользоватся
TCanvas. Правда, это не функция, но все же.
← →
Profi © (2004-09-05 02:17) [5]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("Маленькое изображение присутствует в большом!");
← →
Profi © (2004-09-05 02:20) [6]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
← →
BMP (2004-09-05 02:38) [7]Спасибо Profi за ответ, а то я что то совсем затормозил, конечно же Pixels :-), слишком давно не занимался графикой...
← →
Profi © (2004-09-05 02:43) [8]BMP (05.09.04 2:38) [7]
Не за что!
← →
Ермак © (2004-09-05 11:53) [9]Получи доступ к памяти битмапа (как, не помню, вопрос мастерам-компонентникам). А затем возьми первую строчку искомого рисунка и ищи ее по алгоритмам поиска подстроки в строке (Боуэра-Мура, например, да и простой сойдет). Если она нашлась, то проверяем те строчки, которые лежат под ней. Повторяем так для каждой картинки. Этот алгоритм будет работать ОЧЕНЬ БЫСТРО, в отличие от предложенных.
← →
BMP (2004-09-05 22:54) [10]А какой из алгоритмов самый эффективный по скорости?
Того же Боуэра-Мура несколь способов реализвции нащёл.
← →
Alpon (2004-09-06 10:05) [11]а зачем такое понадобилось делать?
← →
Анонимщик © (2004-09-06 11:51) [12]В зависимости от задачи можно поступать по-разному. Если известно, где искать, то поиск подстрок лишний. Если изображений много и искать приходится часто, то лучше сразу, при добавлении рисунка в список, вычислять какую-нибудь хеш-функцию и т.п. Так что конкретная задача важна.
← →
BMP (2004-09-06 23:41) [13]Зачем к стате писать собственный алгоритм поиска строки в подстроке?
функция System.Pos как раз одну из вариаций и реализует. Тем более, что она написана на асме, так что быстрее сделать всяко не получится.
← →
Рыба © (2004-09-07 13:09) [14]> BMP (06.09.04 23:41) [13]
А Pos разве не для текста?
← →
Multy (2004-09-07 14:35) [15]Текст это тоже массив
← →
Рыба © (2004-09-07 19:28) [16]>Multy (07.09.04 14:35) [15]
>Текст это тоже массив
Ну и что? Как передать ByteArray в качестве текста для Pos?
← →
Рыба © (2004-09-07 19:49) [17]>BMP
Почитай http://www.delphimaster.ru/articles3.html
Можно сделать очень быстрый поиск, только подумай чуток.
← →
Рыба © (2004-09-07 19:51) [18]Точнее вот эту статью
http://www.delphimaster.ru/articles/pixels/index.html
← →
Graff (2004-09-18 22:37) [19]Все это конечно хорошо. Но если надо найти на битмапе изображение, которое не совпадает по масштабу с тем которое наложено. Возникает вопрос как действовать тогда? Для этого надо раскладывать в спектр. С помощью БПФ (Быстрое преобразование Фурье). Более подробную информацию можно найти в справочнике по ВМ.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c