IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Stéganographie


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 5
    Par défaut Stéganographie
    Bonjour je dois faire un encodeur prenant une image grayscale en entrée et l'ajouter a un message binaire. mo image de sortie cache bien mon message mais j'ai de l'overflow(debordement) et je ne comprends pas pourquoi.

    Merci de votre aide: ci dessous le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <cv.h>   	// open cv general include file
    #include <highgui.h>	// open cv GUI include file
    #include <iostream>	// standard C++ I/O
     
    using namespace cv; // OpenCV API is in the C++ "cv" namespace
    using namespace std;
     
    int main( int argc, char** argv )
    {
     
      Mat inputImg;;  // inputobject
      Mat msgImg;	 //msgobject
      Mat outputImg(Size (640,480),0);  //outputImg
      std::vector<int>params;
      const string windowName = "OPENCV: basic image display"; // window name
     
      // check that command line arguments are provided and image reads in OK
     
      if((argc == 4) && !(inputImg = imread( argv[1],  0)).empty())
        {
          // create window object
     
     
     
          // display image in window
     
     
     
    		msgImg = imread( argv[2],0);
     
     
     
    	  // inverted binary image
     
     
    	  for(int i=0; i<msgImg.rows; i++)
    	  {
    		  for(int j=0; j<msgImg.cols; j++)
    		  {
     
    		  if(msgImg.at<uchar>(i,j)==255)
    		  msgImg.at<uchar>(i,j)=0;
    		  if(msgImg.at<uchar>(i,j)==0)
    		  msgImg.at<uchar>(i,j)=1;
     
     
     
    		  outputImg.at<uchar>(i,j) = inputImg.at<uchar>(i,j) + msgImg.at<uchar>(i,j);
    		  if(outputImg.at<uchar>(i,j)>255)
    			  outputImg.at<uchar>(i,j)=255;
    		  if(outputImg.at<uchar>(i,j)<0)
    			  outputImg.at<uchar>(i,j)=0;
    		  }
    	  }
     
    	  imshow("Output image",outputImg);
     
    	  imwrite(argv[3], outputImg, params);
     
          waitKey(0); 
     
          // all OK : main returns 0
     
          return 0;
        }
     
        // not OK : main returns -1
     
        return -1;
    }

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Par défaut
    Déjà, pense a mettre la balise code dans ton message, parce que sinon, c'est difficile a lire.

    Ton problème vient du fait que tu ajoutes deux uchars pour en faire un autre uchar et que tu ne peux pas tester le débordement pour une variable d'un certain type sans passer par un type plus large. Il faut d'abord les transformer en int, les ajouter dans un autre int, tester le débordement, et ensuite seulement le convertir en uchar.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il n'y a pas obligatoirement besoin de passer par un int. Une simple transformation du test de a + b > 255 à a > 255 - b est suffisant.

    Remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(outputImg.at<uchar>(i,j)<0)
        outputImg.at<uchar>(i,j)=0;
    étant donné que tu travailles avec des uchar (ou unsigned char), ce test est inutile.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 5
    Par défaut sujet de l'exercice
    implement an encoder program that takes as input an 8bits grayscale carrier image and a 8bits binary image and produces an encoding images with the message added to the lower bits of the carrier.
    Add binary 0(black) as +1 and 255(white) as +0 to the encoded image to minimise the change in the encoded image (ie add inverted binary image).
    mon code correspond à ses critère. j'ai bien inverser l'image binaire( mon message) pour ensuite l'additionner a mon input image. la sortie( encodedimage) doit ressembler a l'input normalement.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Vu l'algorithme, je te conseille dans un premier temps de reconsidérer ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(msgImg.at<uchar>(i,j)==255)
        msgImg.at<uchar>(i,j)=0;
    if(msgImg.at<uchar>(i,j)==0)
        msgImg.at<uchar>(i,j)=1;
    Surtout pour une valeur initiale de 255
    Citation Envoyé par kevin39300 par MP
    j'ai essayé votre méthode mais,l'image de sortie est blanche avec de l'overflow.
    en sortie je souhaite avoir l'image d'entrée( inputImg) avec mon message cacher dans celle si.

    avec mon code j’obtiens bien l'image d'entrée mais avec des pixel noir a certain endroit.
    Vu que tu n'ajoutes que des 0 et 1, tu ne devrais pas avoir ce problème... tu n'aurais pas inversé les conditions ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 5
    Par défaut
    Merci du fond du cœur depuis le temps que je bataille dessus.

    mille merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Stéganographie d'un fichier quelconque (.txt, .jpg…)
    Par wilfryjules dans le forum OpenCV
    Réponses: 0
    Dernier message: 11/02/2012, 22h39
  2. Stéganographie, bitmap et offset
    Par Heisen dans le forum C
    Réponses: 8
    Dernier message: 31/10/2011, 00h14
  3. Réponses: 9
    Dernier message: 14/05/2008, 10h19
  4. Stéganographie de deux images
    Par ironzorg dans le forum SDL
    Réponses: 10
    Dernier message: 03/07/2007, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo