- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码,detectFacialFeatures 在循环中调用(在从 cam 捕获帧时)。这会正确检索面孔,我可以在图像窗口中看到它们。但是,当有人单击找到的任何面孔(在 img 中绘制的矩形)时,我需要进行 som 处理。为此,我设置了一个鼠标回调,它将 vector 面 作为void* 传递。但是当我将它转换回 vector 时,我并没有取回原始对象。代码,
cout << faces->size() << endl;;
返回垃圾值。不确定我做错了什么。
void FaceDetect::detectFacialFeatures(Mat img)
{
Mat img_gray;
cvtColor(img, img_gray, CV_BGR2GRAY);
equalizeHist( img_gray, img_gray );
vector<Rect> faces;
if( !cascade.empty() )
cascade.detectMultiScale( img_gray, faces, 1.1, 3, 0|CV_HAAR_SCALE_IMAGE, Size(40, 40) );
else
printf("\nFrontal face cascade not loaded\n");
for(unsigned int i = 0 ; i < faces.size() ; i++ )
{
Rect face = faces.at(i);
rectangle(img, face, CV_RGB(255, 0, 0), 1, 8, 0);
cout << face.size() << "or" << endl;
Mat faceImg = img(face);
}
imshow(winname, img);
setMouseCallback(winname, onMouse, (void*)&faces);
}
void FaceDetect::onMouse(int event, int x, int y, int z, void* param)
{
if ( event == EVENT_LBUTTONDOWN )
{
vector<Rect>* faces = (vector<Rect>*) param;
Point pt(x, y);
cout << faces->size() << endl; //This code returns garbage value
}
}
最佳答案
faces
是一个堆栈分配的变量,当 detectFacialFeatures
函数存在时,它将被破坏。您应该堆分配 vector ,或者将现有 vector 作为参数传入。堆分配:
vector<Rect>* faces = new vector<Rect>();
此外,您不应该在 C++ 中使用 C 风格的转换。在此示例中,您应该使用 static_cast
。
vector<Rect>* faces = static_cast<vector<Rect>*>(param);
关于c++ - 传递 void* 时,Opencv setMouseCallback 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25762721/
我正在为视频注释工具设计PyQt界面。我想在视频上绘制形状。我可以使用OpenCV将视频加载到QLabel上,但是不能将鼠标回调设置为PyQt窗口。我必须使用一个名为Window的OpenCV吗?据我
我意识到有很多问题与我要问的问题有关,但我仍然无法让所有内容协同工作。我是 C++ 和 OpenCV 的新手,所以如果我的问题很明显,请原谅。 本质上,我想做的是: 1.打开图片 2.让用户点击图片上
我一直在研究 opencv 并通过了 cv2.setMouseCallback() 。以下是鼠标点击画圆的代码。 导入cv2 将 numpy 导入为 np def draw_circle(event,
我的代码工作正常,但当鼠标左键仍被按下时,它不会连续传递坐标。它确实在鼠标移动时传递坐标。 抱歉,我没有添加 mouse_callback 函数,我现在添加了它。任何帮助都会有所帮助。代码: #inc
我正在尝试在我的 C++ 项目中使用 cv::setMouseCallback。我只是不明白。让我有一个类 Stuff 如何告诉这个类你有一个框架并在这个框架上运行 cv::setMouseCallb
我想在设置类中使用 cv::setMouseCallback 来选择图片区域。这是我的代码: void Settings::on_buttonXML_clicked(){ cv::VideoC
我是 C++ 和 OpenCV 的新手。目前我正在学习关于用户界面的章节,其中包括waitKey功能和setMouseCallBack功能。我很好奇为什么setMouseCallBack多个鼠标事件不
我看到了一些可能相同的问题。阅读答案后,我仍然无法使我的代码工作。所以如果我重复这些帖子,我提前道歉。 我设法写了这段代码: #include #include
我有一个与 IplImage* 一起使用的 my_mouse_callback 示例函数: void my_mouse_callback(int event, int x, int y, int fl
如何在setMouseCallback中调用类中定义的OnMouse? 通常是这样的: cv::setMouseCallback( String, onMouse, 0 ); 这是我的程序: Came
我正在使用 setMouseCallBack 函数来提取像素坐标。如果 for 循环更改为 while(1),它可以工作。 现在,我只想运行并记录像素坐标值24次。但是,for 循环不起作用。使用 s
我对以下程序中的控制流程感到困惑。代码的目的是在来自网络摄像头的实时视频流中绘制一个矩形。 工作原理:第一次单击将初始化矩形起始角的坐标,并用粗体圆圈标记。第二次单击将完成矩形。 现在我的问题是:为什
我有以下代码,detectFacialFeatures 在循环中调用(在从 cam 捕获帧时)。这会正确检索面孔,我可以在图像窗口中看到它们。但是,当有人单击找到的任何面孔(在 img 中绘制的矩形)
我正在使用函数 setMouseCallback 来提取有关每个鼠标事件的像素坐标的信息。如果我使用 openCV 窗口,我创建的程序可以完美运行。准确地说: 图像是cv::Mat; cv::name
我在程序中使用函数 setMouseCallback,它在 GUI 中向我显示 ASUS XITON PRO 的图像/深度图。现在我想从深度图中获取点击点离华硕多远的信息。我试过一些像这样使用 set
我正在尝试使用 OpenCV 和 Python 处理视频。 我使用 2 个线程,一个读取帧,另一个显示帧。现在,我试图通过使用 setMouseCallback 设置点击回调函数来停止视频并恢复播放。
“我正在尝试实现setMouseCallBack函数,通过该函数我想获得鼠标左键单击的图像位置的坐标值。我编写了代码。但是在运行时,它显示了以下错误: 'cv2.cv2'没有属性setMouseCal
我是一名优秀的程序员,十分优秀!