j'ai essayée de faire un programme permettant la dérivée d'intensité d'un pixel a l'emplacement (x,y) en utlisant le filtre horizontal (-1 0 1) puis mettre les intensités des pixels derivées dans un nouvel matrice (la methode utilisé est la convolution de la matrice d'image avec le filtre ). le but est d'afficher l'image dérivée en x : Ix(x,y)= valeur absolu (dI(x,y)/dx)
le probleme ici ce que l'image dx1 n'est pas affichée pourquoi? quel est l'erreur? J'ai aucun probleme de compilation. emm derniere remarque le type de retour d'un pixel est un scalaire mais je voudrais comme resultat un entier. aidez- moi pour resoudre ce probleme SVP
j'aimerais b1 savoir si mon idée est optimisée ou pas ainsi le probleme qui empeche l'affichage de l'image dérivée et merci d'avance
le code est comme suivant:
Code C : 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
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <iostream>
#include "stdio.h"
#include <opencv/cxcore.h>
#include <opencv/cv.h>
 
 
using namespace cv;
using namespace std;
 
int main()
     {
              Mat img = imread("C:/Users/sbi/Desktop/fire/Images/img1.png"); //read the image data in the file "image.JPG" and store it in 'img'
 
     if (img.empty()) //check whether the image is loaded or not
     {
          cout << "Error : Image cannot be loaded..!!" << endl;
          //system("pause"); //wait for a key press
          return -1;
     }
      namedWindow("MyWindow1", CV_WINDOW_AUTOSIZE);
     imshow("MyWindow1", img);
     waitKey(0);
     Mat img_gray;
     GaussianBlur( img, img, Size(3,3), 0, 0, BORDER_DEFAULT);
      cvtColor( img, img_gray, CV_BGR2GRAY);
       namedWindow("MyWindow2", CV_WINDOW_AUTOSIZE);
     imshow("MyWindow2", img_gray);
     waitKey(0);
      int dx=0;
      Mat dx1(img_gray.size(), img_gray.type());
 
     for (int i=2; i<img_gray.rows; i++)
         {
             for (int j=2; j<img_gray.cols; j++)
                 {
 
                     dx= (-1)*img_gray.at<uchar>(i-1,j) + img_gray.at<uchar>(i+1,j);
                     //cout<<"dx="<<dx;
                     dx1.at<uchar>(i-1, j-1)= abs(dx);
 
                                  }
                 }
         namedWindow("MyWindow3", CV_WINDOW_AUTOSIZE);
            imshow("MyWindow3",dx1);
            waitKey(0);
         return 0;
     }