OpenCV объединение двух проектов

169
23 октября 2017, 23:39

Здравствуйте, форумчане!
У меня возникла идея - объединить два проекта из примеров книги "OpenCV 3.0 Computer Vision with Java". А именно - захват вебкамеры и заливка (flood fill) кадра видео. Возникает конфликт между двумя GUI
1) GUI заливки с фотографией

package org.javaopencvbook;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
public class App 
  {
    static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
    public static void main(String[] args) throws Exception {
    String filePath = "src/main/resources/images/cathedral-small.jpg";
    Mat newImage = Imgcodecs.imread(filePath);
    if(newImage.dataAddr()==0){
        System.out.println("Couldn't open file " + filePath);
    }else{
        GUI gui = new GUI("Floodfill Example", newImage);
        gui.init();
    }
    return;
  }
}

2) GUI захвата работает с веб-камерой.

package org.javaopencvbook;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import org.javaopencvbook.utils.ImageProcessor;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio;
public class App 
{
    static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
    }
    private JFrame frame;
    private JLabel imageLabel;
    public static void main(String[] args) {
        App app = new App();
        app.initGUI();
        app.runMainLoop(args);
    }
    private void initGUI() {
        frame = new JFrame("Camera Input Example");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.setSize(400,400);  
        imageLabel = new JLabel();
        frame.add(imageLabel);
        frame.setVisible(true);       
    }
    private void runMainLoop(String[] args) {
        ImageProcessor imageProcessor = new ImageProcessor();
        Mat webcamMatImage = new Mat();  
        Image tempImage;  
        VideoCapture capture = new VideoCapture(0);
        capture.set(Videoio.CAP_PROP_FRAME_WIDTH,320);
        capture.set(Videoio.CAP_PROP_FRAME_HEIGHT,240);
        if( capture.isOpened()){  
            while (true){  
                capture.read(webcamMatImage);  
                if( !webcamMatImage.empty() ){  
                    tempImage= imageProcessor.toBufferedImage(webcamMatImage);
                    ImageIcon imageIcon = new ImageIcon(tempImage, "Captured video");
                    imageLabel.setIcon(imageIcon);
                    frame.pack();  //this will resize the window to fit the image
                }  
                else{  
                    System.out.println(" -- Frame not captured -- Break!"); 
                    break;  
                }
            }  
        }
        else{
            System.out.println("Couldn't open capture.");
        }
    }
}

При создании вылезает много окон. Моя попытка не обвенчалась успехом

    public class OpenCVNetBeans {
    static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
    }
    private JFrame frame;
    private JLabel imageLabel;
    public static void main(String[] args) {
        OpenCVNetBeans app = new OpenCVNetBeans();
        app.initGUI();
        app.runMainLoop(args);
    }
    private void initGUI() {
        frame = new JFrame("Camera Input Example");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.setSize(400,400);  
        imageLabel = new JLabel();
        frame.add(imageLabel);
        frame.setVisible(true);       
    }
    private void runMainLoop(String[] args) {
        ImageProcessor imageProcessor = new ImageProcessor();
        Mat webcamMatImage = new Mat();  
        Image tempImage;  
        VideoCapture capture = new VideoCapture(0);
        capture.set(Videoio.CAP_PROP_FRAME_WIDTH,320);
        capture.set(Videoio.CAP_PROP_FRAME_HEIGHT,240);
            if( capture.isOpened()){  
            while (true){  
                capture.read(webcamMatImage);  
                if( !webcamMatImage.empty() ){  
                    tempImage= imageProcessor.toBufferedImage(webcamMatImage);
                    GUI gui = new GUI("Floodfill Example", webcamMatImage);
                            gui.init();
                }  
                else{  
                    System.out.println(" -- Frame not captured -- Break!"); 
                    break;  
                }
            }  
        }
        else{
            System.out.println("Couldn't open capture.");
        }
    }
}

READ ALSO
Изменение размеров окна в UWP

Изменение размеров окна в UWP

Столкнулся с проблемой изменения размеров окна UWP

374
Подсказки для функций в IntelliSense

Подсказки для функций в IntelliSense

Использую XML-документацию в коде проекта, пример:

243
Entity не полное сохранение в БД

Entity не полное сохранение в БД

Использую EFУ меня есть класс

285
C# Особенности метода String.Split()

C# Особенности метода String.Split()

Можно ли как-либо сделать так, чтобы метод Split делил строку, когда встречает точку, но игнорировал, например "Mr"? Пример: Строка: "Mr

263