Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用鼠标在OpenCV中绘制一个框(使用Mat而不是IplImage)_C++_Opencv - Fatal编程技术网

C++ 用鼠标在OpenCV中绘制一个框(使用Mat而不是IplImage)

C++ 用鼠标在OpenCV中绘制一个框(使用Mat而不是IplImage),c++,opencv,C++,Opencv,我试图在OpenCV中的某个特定位置绘制一个框,以便在那里进行裁剪。现在我正试图在我感兴趣的区域周围绘制一个重画,但在我的mouseEvent()中的drawBox()处出现了一个错误。下面是我的代码,下面是错误输出。我怎样才能让它工作?我看到的每个地方都有较旧的IplImage和其他不推荐使用的函数 #include stuff using namespace cv; bool isDrawing = false; Point start, end; void drawBox(Point

我试图在OpenCV中的某个特定位置绘制一个框,以便在那里进行裁剪。现在我正试图在我感兴趣的区域周围绘制一个重画,但在我的mouseEvent()中的drawBox()处出现了一个错误。下面是我的代码,下面是错误输出。我怎样才能让它工作?我看到的每个地方都有较旧的IplImage和其他不推荐使用的函数

#include stuff

using namespace cv;

bool isDrawing = false;
Point start, end;

void drawBox(Point start, Point end, Mat& img){
Scalar color = (0,255,0);
rectangle(img, start, end, color, 1, 8, 0);
return;
}

void mouseEvent(int evt, int x, int y, int flags, void* param){
if(isDrawing){
    if(evt==CV_EVENT_LBUTTONUP){
        printf("up %d %d\n",x,y);
        isDrawing = false;
        end.x = x;
        end.y = y;
        drawBox(start, end, (Mat&) param);
        return;
    }
}
else{
    if(evt==CV_EVENT_LBUTTONDOWN){
        printf("down %d %d\n",x,y);
        isDrawing = true;
        start.x = x;
        start.y = y;
        return;
    }
}
}

int main(){

Mat feed = imread("C:/Users/Timo/Desktop/image1.jpg", CV_LOAD_IMAGE_GRAYSCALE);

namedWindow("Feed");
imshow("Feed", feed);

cvSetMouseCallback("Feed", mouseEvent, &feed);

waitKey(0);

return 1;
}
控制台

down 293 26
up 520 217
OpenCV Error: Assertion failed <cn <= 4> in unknown function, file ..\..\..\src\opencv\modules\core\src\matrix.cpp, line 845
输出日志

First-chance exception at 0x7796c41f in opencv_project.exe: Microsoft C++ exception: cv::Exception at memory location 0x002de9b4..
Unhandled exception at 0x7796c41f in opencv_project.exe: Microsoft C++ exception: cv::Exception at memory location 0x002de9b4..

问题是您正在传递一个指向
cvSetMouseCallback()
的指针,然后试图将其视为引用

您可以通过更换线路来解决此问题

drawBox(start, end, (Mat&) param);


问题是您正在传递一个指向
cvSetMouseCallback()
的指针,然后试图将其视为引用

您可以通过更换线路来解决此问题

drawBox(start, end, (Mat&) param);

cv::Mat* image  = static_cast<cv::Mat *>(param);
drawBox(start, end, *image);
rectangle(img, start, end, color, 1, 8, 0);
imshow("Feed", img);