Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 23.09.2013
Сообщений: 21
1

OpenCV склеить изображения

17.05.2016, 18:01. Показов 1439. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь переделать программу на плюсах(https://ramsrigoutham.com/2012... in-opencv/) под java но никак не выходит.

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import org.opencv.calib3d.Calib3d;
import org.opencv.core.*;
import org.opencv.features2d.*;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
 
import java.util.LinkedList;
import java.util.List;
 
public class Main {
 
    static Mat image1;
    static Mat image2;
 
    static FeatureDetector fd;
    static DescriptorExtractor fe;
    static DescriptorMatcher fm;
 
    public static void initialise() {
        fd = FeatureDetector.create(FeatureDetector.SURF);
        fe = DescriptorExtractor.create(DescriptorExtractor.SURF);
        fm = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
 
        //images
        image1 = Highgui.imread("panorama_image1.jpg");
        image2 = Highgui.imread("panorama_image2.jpg");
 
        Mat imageGray1 = new Mat();
        Mat imageGray2 = new Mat();
        Imgproc.cvtColor(image1, imageGray1, Imgproc.COLOR_RGB2GRAY);
        Imgproc.cvtColor(image2, imageGray2, Imgproc.COLOR_RGB2GRAY);
 
        //structures for the keypoints from the 2 images
        MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
        MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
 
        //structures for the computed descriptors
        Mat descriptors1 = new Mat();
        Mat descriptors2 = new Mat();
 
        //structure for the matches
        MatOfDMatch matches = new MatOfDMatch();
 
        //getting the keypoints
        fd.detect(imageGray1, keypoints1);
        fd.detect(imageGray2, keypoints2);
 
        //getting the descriptors from the keypoints
        fe.compute(image1, keypoints1, descriptors1);
        fe.compute(image2, keypoints2, descriptors2);
 
        //getting the matches the 2 sets of descriptors
        fm.match(descriptors2, descriptors1, matches);
 
        //turn the matches to a list
        List<DMatch> matchesList = matches.toList();
 
        Double maxDist = 0.0; //keep track of max distance from the matches
        Double minDist = 100.0; //keep track of min distance from the matches
 
        //calculate max & min distances between keypoints
        for (int i = 0; i < descriptors1.rows(); i++) {
            Double dist = (double) matchesList.get(i).distance;
            if (dist < minDist) minDist = dist;
            if (dist > maxDist) maxDist = dist;
        }
 
        System.out.println("max dist: " + maxDist);
        System.out.println("min dist: " + minDist);
 
        //structure for the good matches
        LinkedList<DMatch> goodMatches = new LinkedList<>();
 
        //use only the good matches (i.e. whose distance is less than 3*min_dist)
        for (int i = 0; i < descriptors1.rows(); i++) {
            if (matchesList.get(i).distance < 3 * minDist) {
                goodMatches.addLast(matchesList.get(i));
            }
        }
 
        //structures to hold points of the good matches (coordinates)
        LinkedList<Point> objList = new LinkedList<Point>(); // image1
        LinkedList<Point> sceneList = new LinkedList<Point>(); //image 2
 
        List<KeyPoint> keypoints_objectList = keypoints1.toList();
        List<KeyPoint> keypoints_sceneList = keypoints2.toList();
 
        //putting the points of the good matches into above structures
        for (int i = 0; i < goodMatches.size(); i++) {
            objList.addLast(keypoints_objectList.get(goodMatches.get(i).queryIdx).pt);
            sceneList.addLast(keypoints_sceneList.get(goodMatches.get(i).trainIdx).pt);
        }
 
        System.out.println("\nNum. of good matches" + goodMatches.size());
 
        //converting the points into the appropriate data structure
        MatOfPoint2f obj = new MatOfPoint2f();
        obj.fromList(objList);
 
        MatOfPoint2f scene = new MatOfPoint2f();
        scene.fromList(sceneList);
 
        //finding the homography matrix
        Mat H = Calib3d.findHomography(obj, scene, Calib3d.RANSAC,3);
 
        //structure to hold the result of the homography matrix
        Mat result = new Mat();
 
        //size of the new image - i.e. image 1 + image 2
        Size s = new Size(image1.cols() + image2.cols(), image1.rows());
 
        //using the homography matrix to warp the two images
        Imgproc.warpPerspective(image1, result, H, s);
        int i = image1.cols();
        Mat half = new Mat(result, new Rect(0, 0, image2.cols(), image2.rows()));
        image2.copyTo(half);
 
        Highgui.imwrite("imageStitched.jpg", result);
    }
 
 
    public static void main(String args[]) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        initialise();
    }
}
Результат работы программы
OpenCV склеить изображения


Если поменять местами картинки то программа то выкидывает исключение Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2016, 18:01
Ответы с готовыми решениями:

Склеить изображения
У меня есть 1024 картинок, и мне надо их склеить, собственно клеить думал внутри TImage , хотя как...

Как склеить изображения в один avi файл?
в общем вопрос такой....имеется несколько сотен изображений как их можно склеить в один avi ...

OpenCV найти контур изображения
Всем привет! Необходимо загрузить изображение в движок Unity найти контур изображения на OpenCV С#...

Загрузка изображения из файла с библиотекой openCV VS2015
Не работает загрузка изображения из файла. Переменная после использования фунцкии из библиотеки...

0
17.05.2016, 18:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2016, 18:01
Помогаю со студенческими работами здесь

Opencv для Python: сопоставление изображения с камеры
Когда пытаюсь запустить вот этот код import numpy as np import cv2 cap = cv2.VideoCapture(0) ...

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

Изменение параметров изображения в зависимости от положения ползунка (Opencv)
Помогите пожалуйста написать класс, который будет изменять яркость, насыщенность и цветовую гамму...

OpenCv. Получить зеркальное отображение изображения, используя функции: CvScalar, CvGet2D, CvSet2D
Доброго времени суток. Прошу помощи в написании кода. Нужно сделать зеркальное отображение...


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

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