нужно распознать какая геометрическая фигура на изображении. Для этого у нас есть шаблоны: круг, треугольник и квадрат. Далее передаем изображение и программа должна сказать на какую фигуру она похожа. Проблема в том, что находит неправильно. Сперва добавляю изображения, передаю в массив(pixels) затем нахожу совпадение с шаблонами, после результат.
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class Main {
public static void main(String[] args) throws IOException {
Map<String, Image> mymap = new HashMap<String, Image>();
//Создаем изображения
Image square = new Image("C:\\Java\\projectImage\\src\\img\\R.png");
Image circle = new Image("C:\\Java\\projectImage\\src\\img\\circle.png");
Image triangle = new Image("C:\\Java\\projectImage\\src\\img\\tr.png");
Image myImage = new Image("C:\\Java\\projectImage\\src\\img\\myTrian.png");
// Вывод в консоль
square.printMatrix();
System.out.println();
circle.printMatrix();
System.out.println();
triangle.printMatrix();
System.out.println();
myImage.printMatrix();
// Сохраняем изображения в хранилище
mymap.put("Square", square);
mymap.put("Circle", circle);
mymap.put("Triangle", triangle);
mymap.put("My Image", myImage);
// Находим схожи или нет
square.findSimilarity(square.pixels, myImage.pixels);
System.out.println();
circle.findSimilarity(circle.pixels, myImage.pixels);
System.out.println();
triangle.findSimilarity(triangle.pixels, myImage.pixels);
int num = 500;
String res = "";
// Выявляем на что похоже
for (Map.Entry<String, Image> pair : mymap.entrySet()) {
if (pair.getKey() != "My Image"){
if (pair.getValue().similarity < num){
num = pair.getValue().similarity;
res = pair.getKey();
}
}
}
System.out.println("Answer - " + res);
}
}
Класс Image
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
public class Image {
File file;
BufferedImage image;
int[][] pixels;
int similarity = 0;
Image(String path) throws IOException{
file = new File(path);
image = ImageIO.read(file);
pixels = new int[image.getHeight()][image.getWidth()];
}
void printMatrix() {
for(int i=0; i<image.getHeight(); i++) {
for(int j=0; j<image.getWidth(); j++) {
if(image.getRGB(i,j) != -1) {
System.out.print(" " + '0');
pixels[i][j] = 0;
}
else {
System.out.print(" " + '1');
pixels[i][j] = 1;
}
}
System.out.println();
}
}
void findSimilarity(int[][] arrayA, int[][] arrayB) {
for(int i=0; i<image.getHeight(); i++) {
for(int j=0; j<image.getWidth(); j++) {
if (arrayA[i][j] == arrayB[i][j]){
similarity++;
}
}
}
System.out.println("Similarity: " + similarity);
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public BufferedImage getImage() {
return image;
}
public void setImage(BufferedImage image) {
this.image = image;
}
public int[][] getPixels() {
return pixels;
}
public void setPixels(int[][] pixels) {
this.pixels = pixels;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Начал применять в своей практике паттерн проектирования MVPКак я понимаю этот паттерн помогает переносить ядро приложения на разные платформы
Как записать число в экспоненциальную форму, чтобы осталось определенное количество символов после точки или подскажите где почитать можно...
Не понимаю, почему выводит null при вызове метода в контроллере
В Java новичек, прошу помощи знатоковПытаюсь сделать пересылку данных через COM порт с помощью библиотеки JSSC