玩过冬天 2022-09-04 16:48 采纳率: 100%
浏览 23
已结题

图像处理opencv单应矩阵代码鼠标响应函数没有反应

鼠标响应函数没有反应,函数中的图像展示也没有弹出窗口
导致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保存
        }
    }
}

  • 写回答

1条回答 默认 最新

  • 玩过冬天 2022-09-04 20:41
    关注

    函数中data应该用类定义,否则每次鼠标循环会清除data.points的内容

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月4日
  • 修改了问题 9月4日
  • 修改了问题 9月4日
  • 创建了问题 9月4日

悬赏问题

  • ¥20 怎么在stm32门禁成品上增加记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 解riccati方程组