Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
1

Нужно в картинке выделить черную фигуру на белом фоне в рамку

09.07.2016, 05:09. Просмотров 760. Ответов 9

Помогите в написании кода. Нужно чтобы при загрузке картинки png на которой черная фигура на белом фоне, вокруг фигуры рисовалась рамка, и получить координаты этой рамки и координаты полного изображения
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2016, 05:09
Ответы с готовыми решениями:

О белом фоне, белом тексте и поисковиках
Всем привет! Есть сайт узкой специализации: http://gvs-ukraine.com/shop/ Сайт написан на...

Двигающаяся полоса на белом фоне
Как сделать чтобы на странице был белый прямоугольник с чётко выраженными, но не яркими...

Черный квадрат на белом фоне
Здравствуйте.Помогите построить черный квадрат на белом фоне в matlab.наоборот получается,а как...

Нарисовать снеговика на белом фоне
на с++ написать программу которая выводит в результате снеговик на белом фоне

9
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
09.07.2016, 09:41 2
nataly199106101, загрузить картинку, перебрать все точки и найти минимальное и максимальное значение икс и игрек для черных точек - это и будут левая верхняя и правая нижняя точки рамки. Что такое координаты изображения я не знаю
1
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
10.07.2016, 06:51  [ТС] 3
Спасибо, а каким методом в java осуществляется перебор пикселей и проверка на цвет?

Добавлено через 1 час 28 минут
В коде происходит чтение всех изображений из папки, как в каждом из них найти min и max значение x и y белых пикселей(когда на черном изображении белая фигура)
Java
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
57
58
59
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
 
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
 
public class ImageViewer
{
    private static final Logger log = Logger.getLogger(ImageViewer.class.getName()); 
    
    public static void main(String[] args) throws IOException
    {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        fileChooser.setCurrentDirectory(new java.io.File("."));
        int result = fileChooser.showOpenDialog(null);
        if (result == JFileChooser.APPROVE_OPTION) {
            File choosedDirectory =fileChooser.getSelectedFile();
            List<BufferedImage> imageList = getImagesFromDirectory(choosedDirectory);
            log.info("Из каталога " + choosedDirectory + " прочитано изображений: " + imageList.size());
        }
    }
    
    private static List<BufferedImage> getImagesFromDirectory (File directory) throws IOException
    {
        final List<BufferedImage> imageList = new ArrayList<BufferedImage>();
        Path path = Paths.get(directory.getPath());
        Files.walkFileTree(path, new SimpleFileVisitor<Path>()
        {
            @Override
            public FileVisitResult visitFile (Path path, BasicFileAttributes attrs)
            {
                File file = path.toFile();
                try {
                    BufferedImage image = ImageIO.read(file);
                    if (image != null) {
                        imageList.add(image);
                        log.info("Прочитано изоражение из файла " + file);
                    }
                }
                catch (Exception ex) {
                    log.warning("Ошибка чтения файла " + file + ": " + ex.getLocalizedMessage());
                }
                return FileVisitResult.CONTINUE;
            }
        });
        return imageList;
    }
}
0
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
12.07.2016, 04:26  [ТС] 4
как именно можно это сделать?я новичок в java,как именно можно определить белый ли пиксель и узнать его x и y?
0
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
12.07.2016, 08:27 5
Цитата Сообщение от nataly199106101 Посмотреть сообщение
как именно можно это сделать?
наверное так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int xMin = img.getWidth();
int xMax = 0;
int yMin = img.getHeight();
int yMax = 0;
for (int x = 0; x < img.getWidth(); x++) {
    for (int y = 0; y < img.getHeight(); y++) {
        if (img.getRGB(x, y) == 0) {
            if (x < xMin) xMin = x;
            if (x > xMax) xMax = x;
            if (y < yMin) yMin = y;
            if (y > yMax) yMax = y;
        }
    }
}
1
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
12.07.2016, 08:40  [ТС] 6
Спасибо=)
0
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
13.07.2016, 10:07  [ТС] 7
Не работает, выдются заданные значения yMax,yMin,xMax,xMin они не перезаписываются, такое ощущение что при проходе массива не найдя сразу белый цвет дальше не проверяется
0
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
13.07.2016, 10:18 8
nataly199106101, по коду он ищет черный цвет (0) но возможно там еще альфа канал или цвет не совсем черный тут надо глядеть что вообще выпадают за числа при вызове img.getRGB
0
0 / 0 / 0
Регистрация: 06.03.2014
Сообщений: 15
13.07.2016, 11:28  [ТС] 9
img.getRGB проходя по всему массиву каждый раз выдает только -16777216

Добавлено через 10 минут
при замене на ==-1 стали правильные координаты выдаваться, почему так?
Java
1
2
3
4
5
6
if (img.getRGB(x, y) == -1) {
            if (x < xMin) xMin = x;
            if (x > xMax) xMax = x;
            if (y < yMin) yMin = y;
            if (y > yMax) yMax = y;
        }
0
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
13.07.2016, 12:16 10
nataly199106101, только -16777216 он выдавать не может - он должен выдавать еще что то) -16777216 - это видимо альфа канал в первом байте - 0xFF000000
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2016, 12:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Чёрный текст на белом фоне
Здравствуйте! IE9 вдруг стал показывать все тексты всех страниц чёрными; только ссылки синие и...

Серые разводы на белом фоне
В общем достался монитор мне совершенно бесплатно, изначально была проблема с конденсаторами,...

Подскажите как сделать рамку черную в один пиксель вокруг картинки
Сабж. Вот такая задача стоит. Есть картинка. Надо чтобы скрипт делал вокруг нее черную каемку.

Разпознавание черных символов на белом фоне
есть картинка, черные символы на белом фоне. Надо их..Э.. разпознать. Мне представляеться такой...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.