tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von derpfaff
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
543
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    asdasfsdfdsf asdasfsdfdsf ist offline Mitglied Bronze
    Registriert seit
    Oct 2011
    Beiträge
    31
    Hi,
    ich hab mal wieder eine Frage. Ich möchte gerne ein Programm schreiben, dass ein Bild lädt und links oben ein kleines Quadrat "über das Bild zeichnet", dass die Farbe des Pixels annimmt, auf dem gerade die Maus ist ("Pixellupe"). Ich habe bereits alles programmiert, nur weiss ich nicht, wie das Kästchen die Farbe des aktuell "mit der Maus berührten" Pixels annimmt. Und das ist mein Code:

    Code :
    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
    
    #include <opencv2/opencv.hpp>
    using namespace cv;
     
    #include <iostream>
    using namespace std;
     
    int mouseX=0;
    int mouseY=0;
    void mouseHandler(int event,int x,int y, int flags, void*param){                
        mouseY=y;
        mouseX=x;
    }
     
     
    int main(){
        
        Mat bild=imread("C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg"); 
        namedWindow("img");
        IplImage* img = cvLoadImage("C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg", 1);
        Rect lupe(0, 0, 10, 10);                            
        Mat imgMat(img);
        
        setMouseCallback("img", mouseHandler);
        
        
     
        while(-1==waitKey(1)){              
            cout<<mouseX<<" " <<mouseY<<endl;
            Vec3b pixel=imgMat.at<Vec3b>(mouseY,mouseX);
            
            int red = pixel[2]; 
            int green = pixel[1]; 
            int blue = pixel[0];
     
            cout<<"r0t: "<<red<<"  "<<"Gruen: "<<green<<"  "<<"blau: "<<blue<<endl;
            IplImage* img2 = new IplImage(imgMat);
                
            cvSetImageROI(img2,lupe);
            cvAddS(img2, cvScalar(blue,green,red),img2);
            cvResetImageROI(img2);
            Mat imgMat2(img2);
            imshow("img",imgMat2);
            
        
        }
        return 0;
     
    }


    Würde mich freuen wenn mir einer von Euch helfen kann!
     

  2. #2
    Avatar von derpfaff
    derpfaff derpfaff ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    167
    Hallo,

    also dafür gibt es sicher viele Herangehensweisen. Der manuelle Weg ist, einfach die gewünschten Pixel in einer verschachtelten Schleife einzufärben.
    Einfaches Beispiel: 25x25px Quadrat oben links färben
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    for(int i = 0; i < 25; i++ )
    {
          for(int j = 0; j < 25; j++ )
          {
                img2->imageDate[i * img2->widthStep + j + 0] = B;
                img2->imageDate[i * img2->widthStep + j + 1] = G;
                img2->imageDate[i * img2->widthStep + j + 2] = R;
          }
    }

    Alternativ kannst du mal gucken, ob dir die Funktion cvRectangle() hilft.

    Viel Erfolg
    derPfaff
    asdasfsdfdsf bedankt sich. 

  3. #3
    asdasfsdfdsf asdasfsdfdsf ist offline Mitglied Bronze
    Registriert seit
    Oct 2011
    Beiträge
    31
    Vielen Dank!
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 14.10.11, 14:12
  2. opencv: cvtColor
    Von asdasfsdfdsf im Forum C/C++
    Antworten: 26
    Letzter Beitrag: 09.10.11, 23:13
  3. MFC und OpenCV
    Von Nukleo im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 24.11.10, 15:22
  4. OpenCV Speicherüberlauf
    Von bertonex19 im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 18.11.10, 11:36
  5. Antworten: 3
    Letzter Beitrag: 18.11.09, 11:46

Stichworte