鼠标响应函数没有反应,函数中的图像展示也没有弹出窗口
导致findHomography没有输入
(代码是从网上找的,自己根据理解改了一下,可能在函数调动规范的地方有些没理解透)
#include <iostream>
#include <opencv2/opencv.hpp>
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <Eigen/Dense>
using namespace cv;
using namespace std;
using namespace Eigen;
struct userdata
{
Mat im;
vector<Point2f> points;
};
void Mouse_press(int event, int x, int y, int flag, void *data_ptr);
int main()
{
Mat image_logo;
userdata image_main;
image_logo = imread("/home/wgd/opencv_test/love.jpg");
image_main.im = imread("/home/wgd/opencv_test/main.jpg");
vector<Point2f> left_image;
left_image.push_back(Point2f(0, 0));
left_image.push_back(Point2f(0, image_logo.rows));
left_image.push_back(Point2f(image_logo.cols, image_logo.rows));
left_image.push_back(Point2f(image_logo.cols, 0));
/*
*/
setMouseCallback("Display", Mouse_press, (void *)&image_main);
/*
*/
Mat H = findHomography(left_image, image_main.points);
cout << H << endl;
Mat logoWarped;
warpPerspective(image_logo, logoWarped, H, image_main.im.size());
// showFinal(image_main, logoWarped);
imshow("Result", logoWarped);
waitKey(0);
system("pause");
return 0;
}
void Mouse_press(int event, int x, int y, int flag, void *data_ptr)
{
if (event == EVENT_LBUTTONDOWN)
{
userdata *data = ((userdata *)data_ptr);
circle(data->im, Point(x, y), 3, Scalar(0, 0, 255), 5, CV_AA); //用圆圈标记出鼠标选点击的每一个点
imshow("Image", data->im);
waitKey(0);
if (data->points.size() < 4)
{
data->points.push_back(Point2f(x, y)); //将鼠标选出的每一个点按照选取顺序push_back保存
}
}
}