Opencv: cvRect in Bild

asdasfsdfdsf

Mitglied
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:
#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!
 
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:
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
 
Zurück