namedWindow 正在显示,但不工作
namedWindow is displaying, but not working
我正在开发一个程序,可以通过鼠标在图像上绘制一个红点。 `
#include <stdio.h>
#include <iostream>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
printf("Test");
if (event == EVENT_LBUTTONDOWN)
{
printf("LBUTTON DOWN %d, %d \n", x, y);
circle( (*(Mat*)userdata), Point(x, y), 2, CV_RGB(255, 0, 0), 3);
imshow("img", *(Mat*)userdata);//ADDED
}
else if(event == EVENT_RBUTTONDOWN)
{
printf("RBUTTON DOWN %d, %d \n", x, y);
}
else if (event == EVENT_MBUTTONDOWN)
{
printf("MBUTTON DOWN %d, %d \n", x, y);
}
else if (event == EVENT_MOUSEMOVE)
{
printf("MOVE %d, %d \n", x, y);
}
}
int main(int, char)
{
namedWindow("img", 0);
Mat img = imread("blank.jpg");
setMouseCallback("img", CallBackFunc, &img);
imshow("img", img);
waitKey();
return 0;
}
图像显示正确,但控制台中没有显示任何信息window,图像上也没有出现圆点。
我的代码基于下面 link 中的教程:
https://youtu.be/iWCqjWTx-wI
编辑:在回调函数程序中添加更新行后仍然无法正常工作。 'Test' 没有出现在命令 window 中。 'namedWindow' 函数可能有问题。我正在研究 Windows 7,Visual Studio 2015,OpenCV 3.3.1。
您在 window 中添加圆圈时并未更新图像。您应该在回调函数中执行此操作。我尝试了以下代码并且有效。
using namespace cv;
using namespace std;
void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
if (event == EVENT_LBUTTONDOWN)
{
printf("LBUTTON DOWN %d, %d \n", x, y);
circle((*(Mat*)userdata), Point(x, y), 2, CV_RGB(255, 0, 0), 3);
imshow("img", *(Mat*)userdata); // ADDED
}
else if (event == EVENT_RBUTTONDOWN)
{
printf("RBUTTON DOWN %d, %d \n", x, y);
}
else if (event == EVENT_MBUTTONDOWN)
{
printf("MBUTTON DOWN %d, %d \n", x, y);
}
else if (event == EVENT_MOUSEMOVE)
{
printf("MOVE %d, %d \n", x, y);
}
}
int main(int, char)
{
namedWindow("img", 0);
Mat img = imread("squares.png");
setMouseCallback("img", CallBackFunc, &img);
imshow("img", img);
waitKey();
return 0;
}
您的 CallBackFunc
函数中需要一个 imshow
。在 CallBackFunc
的末尾,您必须添加此行:
imshow("img", (*(Mat*)userdata));
因为您的 main 中的 imshow
没有得到您在 CallBackFunc
中所做的修改
我正在开发一个程序,可以通过鼠标在图像上绘制一个红点。 `
#include <stdio.h>
#include <iostream>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
printf("Test");
if (event == EVENT_LBUTTONDOWN)
{
printf("LBUTTON DOWN %d, %d \n", x, y);
circle( (*(Mat*)userdata), Point(x, y), 2, CV_RGB(255, 0, 0), 3);
imshow("img", *(Mat*)userdata);//ADDED
}
else if(event == EVENT_RBUTTONDOWN)
{
printf("RBUTTON DOWN %d, %d \n", x, y);
}
else if (event == EVENT_MBUTTONDOWN)
{
printf("MBUTTON DOWN %d, %d \n", x, y);
}
else if (event == EVENT_MOUSEMOVE)
{
printf("MOVE %d, %d \n", x, y);
}
}
int main(int, char)
{
namedWindow("img", 0);
Mat img = imread("blank.jpg");
setMouseCallback("img", CallBackFunc, &img);
imshow("img", img);
waitKey();
return 0;
}
图像显示正确,但控制台中没有显示任何信息window,图像上也没有出现圆点。 我的代码基于下面 link 中的教程: https://youtu.be/iWCqjWTx-wI 编辑:在回调函数程序中添加更新行后仍然无法正常工作。 'Test' 没有出现在命令 window 中。 'namedWindow' 函数可能有问题。我正在研究 Windows 7,Visual Studio 2015,OpenCV 3.3.1。
您在 window 中添加圆圈时并未更新图像。您应该在回调函数中执行此操作。我尝试了以下代码并且有效。
using namespace cv;
using namespace std;
void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
if (event == EVENT_LBUTTONDOWN)
{
printf("LBUTTON DOWN %d, %d \n", x, y);
circle((*(Mat*)userdata), Point(x, y), 2, CV_RGB(255, 0, 0), 3);
imshow("img", *(Mat*)userdata); // ADDED
}
else if (event == EVENT_RBUTTONDOWN)
{
printf("RBUTTON DOWN %d, %d \n", x, y);
}
else if (event == EVENT_MBUTTONDOWN)
{
printf("MBUTTON DOWN %d, %d \n", x, y);
}
else if (event == EVENT_MOUSEMOVE)
{
printf("MOVE %d, %d \n", x, y);
}
}
int main(int, char)
{
namedWindow("img", 0);
Mat img = imread("squares.png");
setMouseCallback("img", CallBackFunc, &img);
imshow("img", img);
waitKey();
return 0;
}
您的 CallBackFunc
函数中需要一个 imshow
。在 CallBackFunc
的末尾,您必须添加此行:
imshow("img", (*(Mat*)userdata));
因为您的 main 中的 imshow
没有得到您在 CallBackFunc