使用鼠标回调修改类中的 Mat 属性
Modifying Mat attribute in class with mouse callback
将解释使用项目符号使其易于阅读(希望如此):
- 我正在编写一个程序,该程序需要能够使用鼠标在图像上绘制。
- 我组织程序的方式是每个图像都存储在它自己的类实例中。该实例包括一个保存图像的 cv::Mat 属性,以及一个空白的 cv::Mat(我称之为画布),我希望在其中保存绘制的任何内容。画布的大小和类型与图像 cv::Mat 相同。
- 我编写了一个鼠标回调函数来绘制矩形,但是我收到一个错误(我相信这与从图像中获取存储的画布有关)。
OpenCV 错误:setSize 中的断言失败 (0 <= _dims &&_dims <= CV_MAX_DIM),文件/tmp/opencv-0tcS7S/opencv-2.4.9/modules/core/src/matrix.cpp,第 89 行libc++abi.dylib:以 cv::Exception:/tmp/opencv-0tcS7S/opencv-2.4.9/modules/core/src/matrix.cpp:89 的未捕获异常终止:错误:(-215) 0 <= _dims &&_dims <= 函数 setSize 中的CV_MAX_DIM
这是我的代码:
void draw(int event, int x, int y, int flags, void* params){
ImgData* input = (ImgData*)params; //Convert the struct passed in as void to a ImageData struct.
if(event == EVENT_LBUTTONDOWN){
printf("Left mouse button clicked.n");
input->ipt = Point(x,y); //Store the initial point, this point is saved in memory.
printf("Original position = (%i,%i)n",x,y);
}else if(event == EVENT_LBUTTONUP){
cv::Mat temp_canvas;
input->getCanvas().copyTo(temp_canvas);
printf("Left mouse button released.n");
input->fpt = Point(x,y); //Final Point.
cv::rectangle(temp_canvas, input->ipt, input->fpt, Scalar(200,0,0));
input->setCanvas(temp_canvas);
}
}
我尝试这样做的方法是从对象实例复制画布,在此副本上绘制矩形,然后用此修改后的画布覆盖旧画布。
对此的任何帮助或解释为什么会发生将不胜感激。
谢谢
我已经解决了这个问题,只是我没有正确传递对象:
setMouseCallback("Window", draw, &images->at(imageShown)); // replaced the code: setMouseCallback("Window", draw, &images[imageShown]);
愚蠢的错误...
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- Difference in displaying cv2 Mat
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- 将CHW格式的浮点向量转换为cv::Mat
- C++中的openCV Mat访问冲突
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用鼠标回调修改类中的 Mat 属性