2015-12-31 1 views
0

Je travaille sur une application avec Java qui corrige la perspective (également appelée keystoning). Pour ce faire, j'utilise Bytedeco's JavaCV. En se référant à documentations et plusieurs autres websites et manuels en ligne, j'ai essayé de le faire en utilisant deux méthodes OpenCV, warpPerspective et cvGetPerspectiveTransform. Plus précisément, voici mon code:JavaCV Perspective Transform Donne Erreur

public static void main(String[] args) { 
    IplImage img = new IplImage(imread("src/res/mona-lisa.jpg")); 
    IplImage img2 = new IplImage(3); 

    CvMat mmat = cvCreateMat(3, 3, CV_32FC1); 
    CvPoint2D32f c1 = new CvPoint2D32f(4); 
    CvPoint2D32f c2 = new CvPoint2D32f(4); 

    c1.position(0).put(0, 0); 
    c1.position(1).put(400, 0); 
    c1.position(2).put(0, 300); 
    c1.position(3).put(400, 300); 

    c2.position(0).put(0, 0); 
    c2.position(1).put(img.width(), 0); 
    c2.position(2).put(0, img.height()); 
    c2.position(3).put(img.width(), img.height()); 

    mmat = cvGetPerspectiveTransform(c1, c2, mmat); 
    cvWarpPerspective(img, img2, mmat); 

    cvNamedWindow("Image", 1); 
    cvShowImage("Image", img); 
    cvWaitKey(); 
} 

Si j'exécute ce code, la console me donne un « OpenCV Erreur: Argument incorrect (type tableau inconnu) en cv :: cvarrToMat, fichier src \ matrix.cpp, ligne 880" , et l'un d'entre eux:

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_UNCAUGHT_CXX_EXCEPTION (0xe06d7363) at pc=0x00007ffb1e24a1c8, pid=2020, tid=12660 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0_66-b18) (build 1.8.0_66-b18) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.66-b18 mixed mode windows-amd64 compressed oops) 
# Problematic frame: 
# C [KERNELBASE.dll+0x2a1c8] 
# 
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows 
# 
# An error report file with more information is saved as: 
# ... 
# 
# If you would like to submit a bug report, please visit: 
# http://bugreport.java.com/bugreport/crash.jsp 
# The crash happened outside the Java Virtual Machine in native code. 
# See problematic frame for where to report the bug. 
# 

Cependant, je sais que mona-lisa.jpg est lu correctement parce que si je saute tout le processus mmat il rend l'image originale correctement. J'essaye de réaliser quelque chose semblable à this.

Des pensées?

Répondre

1

N'est-ce pas supposé stocker le résultat dans une image différente (img2)?

cvWarpPerspective (img, img, mmat);

Également au sujet du crash - c'est un long problème que quelqu'un a suggéré qu'il a à voir avec la portée des variables. Peut-être que vous pouvez vérifier les dernières innovations

+0

Pouvez-vous me donner plus d'informations sur le "long problème"? –

+0

En outre, le img, img était une faute de frappe dans le poste. C'était censé être img2. +1 pour me rappeler à ce sujet. –

+0

son un problème connu est ce que je veux dire au moins quand j'essayais 1-2 ans - donc il ne disparaîtra pas - si vous êtes susceptible d'ocv voir leurs wrappers java etc - Je ne suis plus dans – gpasch