À l'aide de get() et() pour accéder à des valeurs de pixel dans OpenCV pour Java

Je suis un débutant dans l'utilisation d'OpenCV pour JAVA. Je veux accéder aux valeurs des pixels d'une image matricielle. Depuis, JAVA jar pour OpenCV n'offre pas de fonctions très pratiques comme le C++, j'ai rencontré quelques difficultés. Après beaucoup de recherche, j'ai trouvé deux méthodes différentes pour le faire que s'ils ne sont pas expliqué correctement (même pas dans la documentation). On peut le faire soit à l'aide de get() et() les fonctions ou par la conversion de la tapis de données dans une primitive de type java, tels que des tableaux. J'ai essayé les deux, mais à obtenir des résultats différents! S'il vous plaît aider à expliquer ce que je fais mal. Suis-je à l'aide de la mauvaise ou de quelque autre bête problème. Je suis encore un newbie donc veuillez pardonner si sa question stupide. 🙂

CAS 1: Utilisation de get() de la fonction

Mat A = Highgui.imread(image_addr); \\"image_addr" is the address of the image
Mat C = A.clone();
Size sizeA = A.size();
for (int i = 0; i < sizeA.height; i++)
    for (int j = 0; j < sizeA.width; j++) {
        double[] data = A.get(i, j);
        data[0] = data[0] / 2;
        data[1] = data[1] / 2;
        data[2] = data[2] / 2;
        C.put(i, j, data);
    }

CAS 2: à l'Aide du Tableau

Mat A = Highgui.imread(image_addr); \\"image_addr" is the address of the image
Mat C = A.clone();
int size = (int) (A.total() * A.channels());
byte[] temp = new byte[size];
A.get(0, 0, temp);
for (int i = 0; i < size; i++)
   temp[i] = (byte) (temp[i] / 2);
C.put(0, 0, temp);

Maintenant, d'après ma compréhension, ils devraient faire la même chose. Ils ont tous deux accès à l'individu des valeurs de pixel (tous les 3 canaux) et en faire la moitié. Je suis pas d'erreur après l'exécution. Mais, la sortie de l'image que j'obtiens est différent dans ces deux cas. Quelqu'un peut-il expliquer quel est le problème? Peut-être que je ne comprends pas exactement comment get() fonctionne? C'est à cause de l'octet() casting? S'il vous plaît aider.

Merci!

OriginalL'auteur gargsl | 2013-06-11