6

フレームがあり、長方形の特定の位置に長方形を描画したい:

#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..

なぜこれを取得するのか、どうすれば解決できるのか

4

2 に答える 2

16

C++ API と C API を混同しています。「cvRectangle」の代わりに「cv」名前空間で長方形関数を使用します。

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
    // ...
于 2012-12-12T14:10:42.087 に答える
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();

}
于 2012-12-15T05:37:50.310 に答える