gpt4 book ai didi

c++ - 用鼠标在 OpenCV 中画一个框(使用 Mat 而不是 IplImage)

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:37 24 4
gpt4 key购买 nike

我试图在 OpenCV 中的特定位置绘制一个框,以便我可以在那里裁剪它。现在我正试图在我感兴趣的区域周围绘制一个 recatnge,但我在 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

弹出窗口

Unhandled exception at 0x80000000 in opencv_project.exe: )xC0000005: Access violation.

输出日志

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

cv::Mat* image  = static_cast<cv::Mat *>(param);
drawBox(start, end, *image);

此外,要真正看到您绘制的框,您需要再次调用 imshow()。即:

rectangle(img, start, end, color, 1, 8, 0);
imshow("Feed", img);

关于c++ - 用鼠标在 OpenCV 中画一个框(使用 Mat 而不是 IplImage),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19505102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com