2012-12-12 5 views
6

I 프레임을 가지고와 specefic 위치에 사각형을 직사각형을 그리려에 OpenCV의와 RECT 그리기 : 내가 코드를 실행프레임

#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 내가 메모리 오류가 발생합니다.

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

이걸 어떻게해야합니까, 어떻게 내가이

+0

는 당신에게 값이 max.x 확실하고 max.y 프레임의 경계 내에있는? –

+0

네, 확신합니다 최대 프레임에서 한 지점입니다 – Engine

+0

난 그냥 다른 코드와 테스트를했고 잘 작동하지 않습니다 :(, 내가 잘못하고 있는거야? 내 편집 된 질문을 참조하십시오 – Engine

답변

15

당신은 C의 API와 C++ API를 혼합하고 해결할 수있는 이유는 어떤 생각을. "cvRectangle"대신 "이력서"네임 스페이스에 사각형 기능을 사용

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

    // ... 

: 또한

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

, 당신은 당신이 안 열려 창에서 이미지를 표시하려는 이미지가 제대로로드되지 않으면 빈 이미지 위에 그려야하기 때문에 오류가 발생할 수도 있습니다.

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

덕분에 Niko가 작동합니다. – Engine

+1

'cv :: Mat frame' 'frame.empty()'를 체크함으로써 올바르게로드되었다. – Chris

2

이 코드는 작동합니다

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

}