2012-12-12 17 views
6

Ben bir çerçeve var ve birlikte specefic pozisyonunda bir dikdörtgen bir dikdörtgen çizmek istiyorum üzerine OpenCV ile rect çizim: Ben kodu çalıştırmakbir çerçeve

#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 Bir hatıra hatası alıyorum.

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

Bunu alırım ve nasıl o

+0

size değerleri max.x emin ve max.y çerçevenin sınırları içerisindedir? –

+0

evet, eminim, max – Engine

+0

çerçevesinden bir noktadır, sadece başka bir kodla bir test yaptım ve de işe yaramayacağım :(, yanlış bir şey yapıyorum? – Engine

cevap

15

Sen C API ile C++ API kadar karıştırma ediyoruz çözebilir neden bir fikrin. "CvRectangle" yerine "cv" ad alanında dikdörtgen işlevini kullanın:

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

    // ... 

: Ayrıca

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

, size açmadı bir pencerede görüntüyü göstermek için çalışıyoruz Görüntü düzgün yüklenmediyse, bu da bir hataya neden olabilir, çünkü daha sonra boş bir resme çizmeye çalışıyorsunuz.

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

sorunudur, o kadar çok çalışıyor: – Engine

+1

"cv :: Mat frame" öğesinin olup olmadığını kontrol edebilirsiniz. frame.empty() işlevini kontrol ederek doğru yüklenir – Chris

2

Bu Kod çalışır:

#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(); 

}