2012-12-12 49 views
6

我有一個框架,並希望繪製一個矩形中specefic位置的矩形上繪製與OpenCV的一個矩形:

#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; 
} 

德恩我運行的代碼我得到一個內存錯誤。

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。使用矩形功能的「CV」的命名空間,而不是「cvRectangle」的:

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

此外,你想顯示在窗口中的圖像,你沒有打開:

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

    // ... 

如果圖像加載不正確,這可能也會導致錯誤,因爲您正在嘗試繪製空白圖像。

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

}