c++如何使用鼠标在屏幕上取点
时间: 2023-12-14 10:02:51 浏览: 135
要使用鼠标在屏幕上取点,你需要使用Windows API中的GetCursorPos函数获取当前鼠标的坐标。具体步骤如下:
1. 引入Windows.h头文件。
2. 使用GetCursorPos函数获取鼠标坐标:
```c++
POINT pt;
GetCursorPos(&pt);
int x = pt.x;
int y = pt.y;
```
3. 如果你想要在一个窗口内获取鼠标坐标,可以使用ScreenToClient函数将屏幕坐标转换为客户区坐标:
```c++
HWND hWnd; // 窗口句柄
POINT pt;
GetCursorPos(&pt);
ScreenToClient(hWnd, &pt);
int x = pt.x;
int y = pt.y;
```
通过这种方式,你就可以使用鼠标在屏幕上取点了。
相关问题
c++如何调用opencv库,使用鼠标在屏幕上取点,并将点位画在图片上
要调用 OpenCV 库,你需要在 C++ 代码中包含相应的头文件和库文件。具体步骤如下:
1. 在代码中包含 OpenCV 的头文件,例如:
```c++
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
```
2. 链接 OpenCV 的库文件,例如:
```c++
g++ -o output main.cpp `pkg-config --libs opencv`
```
其中 `main.cpp` 是你的代码文件名,`output` 是你的可执行文件名。
3. 使用鼠标在屏幕上取点,可以使用 OpenCV 中的 `setMouseCallback` 函数,例如:
```c++
void onMouse(int event, int x, int y, int flags, void* userdata)
{
if (event == cv::EVENT_LBUTTONDOWN)
{
std::cout << "Left button of the mouse is clicked - position (" << x << ", " << y << ")" << std::endl;
}
}
int main()
{
cv::Mat image = cv::imread("image.jpg");
cv::namedWindow("Image");
cv::setMouseCallback("Image", onMouse, NULL);
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
```
这段代码创建了一个名为 "Image" 的窗口,并在窗口中显示了一张名为 "image.jpg" 的图片。当用户在窗口中单击鼠标左键时,会调用 `onMouse` 函数,并输出鼠标点击的位置。
4. 将点位画在图片上,可以使用 OpenCV 中的 `circle` 函数,例如:
```c++
void onMouse(int event, int x, int y, int flags, void* userdata)
{
if (event == cv::EVENT_LBUTTONDOWN)
{
cv::Mat* image = static_cast<cv::Mat*>(userdata);
cv::circle(*image, cv::Point(x, y), 5, cv::Scalar(0, 0, 255), -1);
cv::imshow("Image", *image);
}
}
int main()
{
cv::Mat image = cv::imread("image.jpg");
cv::namedWindow("Image");
cv::setMouseCallback("Image", onMouse, &image);
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
```
这段代码在 `onMouse` 函数中调用了 `circle` 函数,将鼠标点击的位置画了一个半径为 5 的红色圆圈,并在窗口中更新了图片。注意,我们将图片的指针传递给了 `setMouseCallback` 函数的 `userdata` 参数,以便在 `onMouse` 函数中使用。
c++如何调用opencv库,使用鼠标在屏幕上取点,并把点位信息保存在一个容器内
要使用OpenCV库来实现鼠标在屏幕上取点,并将点位信息保存在容器中,需要使用OpenCV中的鼠标事件回调函数。具体步骤如下:
1. 添加OpenCV库文件和头文件:
```c++
#include <opencv2/opencv.hpp>
#pragma comment(lib, "opencv_world420.lib")
```
2. 定义一个容器来保存点位信息:
```c++
std::vector<cv::Point> points;
```
3. 在鼠标事件回调函数中,获取鼠标坐标并将其保存在容器中:
```c++
void onMouse(int event, int x, int y, int flags, void* param) {
if (event == cv::EVENT_LBUTTONDOWN) {
// 鼠标左键按下,保存点位信息
std::vector<cv::Point>* points = (std::vector<cv::Point>*)param;
points->push_back(cv::Point(x, y));
}
}
```
4. 在程序中使用cv::setMouseCallback函数将鼠标事件回调函数与窗口绑定:
```c++
cv::Mat img = cv::imread("image.jpg");
cv::namedWindow("image");
cv::setMouseCallback("image", onMouse, &points);
while (true) {
cv::imshow("image", img);
cv::waitKey(1);
}
```
通过这种方式,你就可以使用鼠标在OpenCV窗口中取点,并将点位信息保存在容器中了。
阅读全文