2012-12-12 20 views
6

Ich habe einen Rahmen und will mit einem Rechteck in specefic Position ein Rechteck zeichnen:Zeichnen einen rect mit opencv auf einem Rahmen

#include "opencv2/opencv.hpp" 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include<conio.h> 

int main() { 
cv::Mat frame = cv::imread("cmd.png"); 
    cvRectangle(
      &frame, 
      cvPoint(5,10), 
      cvPoint(20,30), 
      cvScalar(255,255,255) 
     ); 
    cv::imshow("test " , frame); 
while (cv::waitKey() != 23) ; 
return 1; 
} 

WENN ich den Code ausführen ich einen Speicherfehler zu bekommen.

Unhandled exception at 0x000007fefd42caed in OpenCV_capture.exe: Microsoft C++ 
exception: cv::Exception at memory location 0x0018ead0.. 

Jede Idee, warum ich dies nun tun, und wie kann ich es löse

+0

Sind Sie sicher, dass die Werte max.x und max.y sind innerhalb der Grenzen des Rahmens? –

+0

ja ich bin mir sicher, das sind die Max ist der ein Punkt aus dem Rahmen – Engine

+0

Ich habe gerade einen Test mit einem anderen Code gemacht und es funktioniert auch nicht :(, mache ich etwas falsch? Siehe meine bearbeitete Frage – Engine

Antwort

15

Sie Mischen den C++ API mit dem C-API auf. Verwenden Sie das Rechteck-Funktion im „cv“ Namespace statt „cvRectangle“:

cv::rectangle(
    frame, 
    cv::Point(5, 10), 
    cv::Point(20, 30), 
    cv::Scalar(255, 255, 255) 
); 

Außerdem Sie versuchen, das Bild in einem Fenster angezeigt werden, die Sie nicht geöffnet:

int main() { 
    cv::namedWindow("test "); 

    // ... 

Wenn das Bild nicht ordnungsgemäß geladen wurde, kann dies ebenfalls einen Fehler verursachen, da Sie dann versuchen, auf ein leeres Bild zu zeichnen.

if (frame.data != NULL) { 
    // Image successfully loaded 
    // ... 
+0

Vielen Dank Niko es funktioniert. – Engine

+1

Beachten Sie, dass Sie überprüfen können, ob 'cv :: Mat Frame ' wird korrekt geladen, indem man 'frame.empty()' überprüft – Chris

2

Dieser Code funktioniert:

#include <opencv\cv.h> 
#include <opencv\highgui.h> 
int main() 
{ 
//Window 
cvNamedWindow("Drawing",CV_WINDOW_AUTOSIZE); 
//Image loading 
IplImage* original=cvLoadImage("i.jpg"); 
if(Original==NULL) 
{ 
    puts("ERROR: Can't upload frame"); 
    exit(0); 
} 

cvRectangle(original,cvPoint(100,50),cvPoint(200,200),CV_RGB(255,0,0),5,8); 

//Showing the image 
cvShowImage("Drawing",original); 

cvWaitKey(0); 
//CleanUp 
cvReleaseImage(&original); 
cvDestroyAllWindows(); 

} 
Verwandte Themen