JavaCV konwersja do odcieni szarości

0

Witam,
Stawiam pierwsze kroki w JavaCV. Napisałem program, który konwertuje obraz (pobrany z bazy danych) do odcieni szarości. Korzystam z przestarzałych struktur IplImage, które wymagają ręcznego zarządzania pamięcią.

Działająca metocda na IplImage wygląda następująco:

    public BufferedImage grayScaleImage(BufferedImage image) {
        // convert to 1 channel image
        IplImage b = IplImage.createFrom(image);
        IplImage c = opencv_core.cvCreateImage(opencv_core.cvGetSize(b), opencv_core.IPL_DEPTH_8U, 1);
        cvCvtColor(b, c, CV_BGR2GRAY);
        BufferedImage retImage = c.getBufferedImage();
        cvReleaseImage(b);
        cvReleaseImage(c);
        return retImage;
    }

Próba konwersji:

    public BufferedImage grayScaleImageMat(BufferedImage image) {
        // convert to 1 channel image
        Mat b = Mat.createFrom(image);
        Mat c = new Mat(b.size(), CV_8UC1);
        // CvtColor(b, c, CV_BGR2GRAY);
        BufferedImage retImage = c.getBufferedImage();
        return retImage;
    }

Mam problem z wykorzystaniem odpowiednika metody CvtColor, która zadziała z obiektami Mat.

Będę wdzięczny za podpowiedź.

0

Jest postęp:

  • udało się skonwertować do odcieni szarości korzystając z obiektów Mat
    @Override
    public BufferedImage grayScaleImageMat(BufferedImage image) {
        // convert to 1 channel image
        Mat b = Mat.createFrom(image);
        Mat c = new Mat(b.size(), CV_8UC1);
        opencv_imgproc.cvtColor(b, c, opencv_imgproc.COLOR_BGR2GRAY);
        BufferedImage retImage = c.getBufferedImage();
        return retImage;
    }

http://stackoverflow.com/questions/10344246/how-can-i-convert-a-cvmat-to-a-gray-scale-in-opencv

Problem nierozwiązany, proszę o pomoc z innym problem, jak zachować oryginalny rozmiar?
Obecnie przekształcony obraz w szarości nie ma oryginalnej wielkości.

0

Wciąż walczę.

Ten kod też nie działa:

    public BufferedImage grayScaleImageMat(BufferedImage image) {
        // convert to 1 channel image
        Mat b = Mat.createFrom(image);
        Mat c = new Mat(b.size());
        cvtColor(b, c, opencv_imgproc.COLOR_RGB2GRAY);
        BufferedImage retImage = c.getBufferedImage();
        return retImage;
    }

Dla lepszej ilustracji problemu załączyłem brazek oryginalny i wyjściowy (gray).

0

Na podstawie informacji znalezionej na podanej niżej stronie zostaje z C API, które po prostu działa:
https://code.google.com/p/javacv/wiki/WhereIsFeatureXOfOpenCV

Temat można zamknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1