0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 64
1

Массив изображений

30.04.2018, 12:47. Показов 942. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В папке хранятся изображения, необходимо что бы они поочередно передавались функции для обработки. Не могу понять в чём тут ошибка.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
$img = ['images/blue/testset/*.png'];
for(reset($img); !$img; next($img)) {
 
    $image = RecogGenMonohromeMaskImage($img);
}
 
    function RecogGenMonohromeMaskImage($image)
    {
        //Определяем самые часто используемые цвета
        $percision = 10;
        $colors = array();
        for ($iy = 0, $y = imagesy($image); $iy < $y; $iy++) {
            for ($ix = 0, $x = imagesx($image); $ix < $x; $ix++) {
                $index = imagecolorat($image, $ix, $iy);
                $color = imagecolorsforindex($image, $index);
 
                if (($color['green'] >= 0 && $color['green'] <= ($percision)) && ($color['red'] >= 0 && $color['red'] <= (200 + $percision)) && ($color['blue'] >= 0 && $color['blue'] <= (200 + $percision))) {
 
                    if (!array_key_exists($index, $colors)) {
                        $colors[$index] = 0;
                    }
                    $colors[$index]++;
                }
            }
        }
 
        arsort($colors);
        $k_colors = array_keys($colors);
        $main_color = imagecolorsforindex($image, $k_colors[0]);
 
        $mask = array();
        //Выделяем самый часто используемый цвет
        $percision = 30;
        for ($iy = 0, $y = imagesy($image); $iy < $y; $iy++) {
            $mask[$iy] = array();
            for ($ix = 0, $x = imagesx($image); $ix < $x; $ix++) {
 
                $index = imagecolorat($image, $ix, $iy);
                $color = imagecolorsforindex($image, $index);
 
                if (($color['green'] >= ($main_color['green'] - $percision) && $color['green'] <= ($main_color['green'] + $percision)) && ($color['red'] >= ($main_color['red'] - $percision) && $color['red'] <= ($main_color['red'] + $percision)) && ($color['blue'] >= ($main_color['blue'] - $percision) && $color['blue'] <= ($main_color['blue'] + $percision))) {
 
                    $mask[$iy][$ix] = 1;
                } else {
                    $mask[$iy][$ix] = 0;
                }
            }
        }
 
        return $mask;
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2018, 12:47
Ответы с готовыми решениями:

Перебор всех изображений из папки и добавление в массив
Доброго времени суток, нужна помощь как лучше организовать такую задачу... Нужно что бы рандомным...

Хранение изображений и загрузка изображений
Привет, не когда не работал с изображениями когда их много, и тут возникла такая не обходимость,...

Массив изображений
Всем привет. Хотел обойтись без ImageList и использовать массив, вот только почему-то не получается...

Массив из изображений
Есть у меня две формы. На первой форме несколько кнопок. На второй форме элемент pictureBox (хочу...

15
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
30.04.2018, 13:41 2
Цитата Сообщение от _Dasha_ Посмотреть сообщение
Не могу понять в чём тут ошибка
В чём выражается ошибка?

Полагаю что здесь:
PHP
1
$img = ['images/blue/testset/*.png'];
PHP
1
$img = glob("images/blue/testset/*.png");
0
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 64
30.04.2018, 13:41  [ТС] 3
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
$a=scandir('images/blue/testset');
$img =sizeof($a);
 
for($i=2;$i<$img;$i++) {
 
    function RecogGenMonohromeMaskImage($image)
    {
        //Определяем самые часто используемые цвета
        $percision = 10;
        $colors = array();
        for ($iy = 0, $y = imagesy($image); $iy < $y; $iy++) {
            for ($ix = 0, $x = imagesx($image); $ix < $x; $ix++) {
                $index = imagecolorat($image, $ix, $iy);
                $color = imagecolorsforindex($image, $index);
 
                if (($color['green'] >= 0 && $color['green'] <= ($percision)) && ($color['red'] >= 0 && $color['red'] <= (200 + $percision)) && ($color['blue'] >= 0 && $color['blue'] <= (200 + $percision))) {
 
                    if (!array_key_exists($index, $colors)) {
                        $colors[$index] = 0;
                    }
                    $colors[$index]++;
                }
            }
        }
 
        arsort($colors);
        $k_colors = array_keys($colors);
        $main_color = imagecolorsforindex($image, $k_colors[0]);
 
        $mask = array();
        //Выделяем самый часто используемый цвет
        $percision = 30;
        for ($iy = 0, $y = imagesy($image); $iy < $y; $iy++) {
            $mask[$iy] = array();
            for ($ix = 0, $x = imagesx($image); $ix < $x; $ix++) {
 
                $index = imagecolorat($image, $ix, $iy);
                $color = imagecolorsforindex($image, $index);
 
                if (($color['green'] >= ($main_color['green'] - $percision) && $color['green'] <= ($main_color['green'] + $percision)) && ($color['red'] >= ($main_color['red'] - $percision) && $color['red'] <= ($main_color['red'] + $percision)) && ($color['blue'] >= ($main_color['blue'] - $percision) && $color['blue'] <= ($main_color['blue'] + $percision))) {
 
                    $mask[$iy][$ix] = 1;
                } else {
                    $mask[$iy][$ix] = 0;
                }
            }
        }
 
        return $mask;
    }
 
 
 
    $image = RecogGenMonohromeMaskImage($a[$i]);
    echo '<img src="images/blue/testset/'.$a[$i].'">';
}
после изменений в коде выдаёт вот это:
Warning: imagesy() expects parameter 1 to be resource, string given in D:\\index.php on line 13

Warning: imagecolorsforindex() expects parameter 1 to be resource, string given in D:\\index.php on line 30

Warning: imagesy() expects parameter 1 to be resource, string given in D:\\index.php on line 35

Fatal error: Cannot redeclare RecogGenMonohromeMaskImage() (previously declared in D:\\index.php :8) in D:\\index.php on line 8
0
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
30.04.2018, 13:45 4
Попробуйте так:
PHP
1
2
$img = glob("images/blue/testset/*.png");
for(reset($img); !$img; next($img)) {
0
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 64
30.04.2018, 13:51  [ТС] 5
ошибок нет, но и не выводит ни чего

PHP
1
echo '<img src="images/blue/testset/'.$img.'">';
0
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
30.04.2018, 13:56 6
$img это массив ссылок
PHP
1
2
3
4
foreach (glob("images/blue/testset/*.png") as $filename) {
    echo "$filename размер " . filesize($filename) . "<br/>";
    echo '<img src="'.$filename.'">';
}
1
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 64
30.04.2018, 14:16  [ТС] 7
Спасибо большое, не подскажете, как ещё вывести $image (изображение после обработки функцией)?
0
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
30.04.2018, 14:36 8
PHP
1
2
3
4
5
6
7
8
9
10
for(reset($img); !$img; next($img)) {
 
    $image = RecogGenMonohromeMaskImage($img);
 
    echo "Результат обработки ".current($img).":<br>";
    print_r($image); // Здесь будет выводиться массив с результатом обработки. А какие данные выводить на экран решайте сами. Например: echo $image[0][4] и т.п.
    echo "<br>";
    echo '<img src="'.current($img).'">';
    echo "<br>";
}
0
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 64
30.04.2018, 15:03  [ТС] 9
когда использую код выше, ни чего не выводит

PHP
1
2
3
4
5
6
7
8
9
10
11
12
 $i = glob("https://www.cyberforum.ru/images/blue/testset/*.png");
 
       foreach ($i as $img) {
           echo '<img src="' . $img . '">';
           echo "<br>";
 
 
           for (reset($img); !$img; next($img)) {
               $image = RecogGenMonohromeMaskImage($img);
               print_r($image);
           }
       }
выводит только исходные картинки и ошибку

Warning: reset() expects parameter 1 to be array, string given in D:\\index.php on line 55
0
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
30.04.2018, 15:10 10
PHP
1
foreach ($i as $img)
уже цикл, а $img это лишь один элемент из общего массива $i. Замените это:
PHP
1
2
3
4
for (reset($img); !$img; next($img)) {
               $image = RecogGenMonohromeMaskImage($img);
               print_r($image);
           }
на это:
PHP
1
2
$image = RecogGenMonohromeMaskImage($img);
print_r($image);
Второй цикл не нужен.
0
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 64
30.04.2018, 15:28  [ТС] 11
PHP
1
2
3
4
5
6
7
8
9
$i = glob("images/blue/testset/*.png");
 
       foreach ($i as $img) {
           echo '<img src="' . $img . '">';
           echo "<br>";
 
               $image = RecogGenMonohromeMaskImage($img);
               print_r($image);
       }
Вывел:
Warning: imagesy() expects parameter 1 to be resource, string given in D:\\index.php on line 8

Warning: imagecolorsforindex() expects parameter 1 to be resource, string given in D:\\index.php on line 25

Warning: imagesy() expects parameter 1 to be resource, string given in D:\\index.php on line 30
Array ( ) и изображение
0
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
30.04.2018, 15:44 12
Обратите внимание в какой директории находится файл с функцией RecogGenMonohromeMaskImage

Полагаю что функция imagesy($image) не находит изображение по указанному адресу. Формируйте путь таким образом чтобы php мог найти картинку из функции RecogGenMonohromeMaskImage
PHP
1
$image = RecogGenMonohromeMaskImage("papka/".$img);
Покажите что попадает в
PHP
1
2
echo '<img src="' . $img . '">';
echo $img;
0
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 64
30.04.2018, 16:23  [ТС] 13
кажется поняла, когда компилирую с
PHP
1
echo $img;
выводит Array()

и поэтому функции передаётся массив, а нужно передавать поэлементно его
0
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
30.04.2018, 16:35 14
Цитата Сообщение от _Dasha_ Посмотреть сообщение
а нужно передавать поэлементно его
Верно, только вот этот код:
PHP
1
2
3
4
5
6
7
8
9
$i = glob("images/blue/testset/*.png");
 
       foreach ($i as $img) {
           echo '<img src="' . $img . '">';
           echo "<br>";
 
               $image = RecogGenMonohromeMaskImage($img);
               print_r($image);
       }
как раз и передаёт в функцию RecogGenMonohromeMaskImage один элемент массива. Здесь $img должна быть одна ссылка на одно изображение. Этот код должен работать.

Попробуйте запустить этот код:
PHP
1
2
3
4
5
6
7
8
9
10
11
$i = glob("images/blue/testset/*.png");
 
       foreach ($i as $img) {
           echo '<img src="' . $img . '">';
           echo "<br>";
           echo $img;
           echo "<br>";
 
               $image = RecogGenMonohromeMaskImage($img);
               print_r($image);
       }
и посмотрите что попадает в $img.
0
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 64
30.04.2018, 16:43  [ТС] 15
странно, выводит верно: images/blue/testset/040272.png

с теми же ошибками для imagesy(), imagecolorsforindex()
0
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
30.04.2018, 17:42 16
Попробуйте так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
    function RecogGenMonohromeMaskImage($image)
    {
        $image = imagecreatefrompng($image);
        //Определяем самые часто используемые цвета
        $percision = 10;
        $colors = array();
 
 
        .....
 
 
        return $mask;
        imagedestroy($image);
Добавлено через 29 минут
Кстати, если там много картинок (+ больших размеров), то эта функция будет выполняться достаточно долго. Может вылезти за пределы max_execution_time. Протестируйте на пару небольших картинках.
0
30.04.2018, 17:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2018, 17:42
Помогаю со студенческими работами здесь

Массив изображений
возникла одна проблема у меня есть у меня таблица в базе там поле img, в этой поле у меня находится...

Массив изображений
как создать массив в котором возможно хранить некоторое количество изображений. если это...

Массив изображений
Вечер добрый, уважаемые! Столкнулся с такой проблеймой: есть изображения барабана с 13-ю...

Массив изображений
доброго времени суток. нужен массив изображений. который я написал - крашится. проблема,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru