阿杰小子 2021-10-26 13:01 采纳率: 50%
浏览 1196

Qt 出现 no matching function for call to 的方法调用错误问题,不知道如何解决

在Qt文件中调用接口函数,文件目录如下:

img

但是在mainwindow.cpp里使用类margin的方法roberts却报错,不知道原因。在头文件里也声明了函数。
报错问题如下:

E:\opencv4\margindetect\mainwindow.cpp:46: error: no matching function for call to 'margin::roberts(QImage&, cv::Mat&, int, int, int)'
..\margindetect\mainwindow.cpp:46:51: error: no matching function for call to 'margin::roberts(QImage&, cv::Mat&, int, int, int)'
     Robert.roberts(myQImg, imgDst,  CV_32FC1, 0, 1);                                                   ^

margin.hpp文件如下

#ifndef MARGIN_H
#define MARGIN_H

#include<opencv2/opencv.hpp>
using namespace cv;

void conv2D(Mat src,Mat kernel, Mat dst, int ddepth, Point2f anchor);
void sepConv2D_Y_X(Mat src, Mat src_kerY_kerX, int ddepth, Mat kernelY, Mat kernelX, Point2f anchor);

class margin
{
public:
    void roberts(cv::Mat src, cv::Mat dst, int ddepth, int x, int y );
    void prewitt(cv::Mat src, cv::Mat dst, int ddepth, int x, int y );
};

#endif // MARGIN_H

在mainwindow里调用如下:

void MainWindow::img_Roberts()
{
    margin Robert;
    Mat imgData = imread(imgPath.toLatin1().data());
    Mat imgDst = Mat::zeros(imgData.size(),imgData.type());
    cvtColor(imgData, imgData, COLOR_BGR2GRAY);
    myImg = imgData;
    myQImg = QImage((const unsigned char*)(imgData.data), imgData.cols, imgData.rows, QImage::Format_Grayscale8);
    Robert.roberts(myQImg, imgDst,  CV_32FC1, 0, 1); //这里出现bug
    convertScaleAbs(imgDst, myQImg1, 1, 0);
    imgShow1();
}

margin中函数文件如下

#include<opencv2/opencv.hpp>
#include"margin.h"

using namespace cv;

void conv2D(Mat src,Mat kernel, Mat dst, int ddepth, Point2f anchor)
{
    Mat kernelFlip;
    flip(kernel, kernelFlip, -1);
    filter2D(src, dst, ddepth, kernelFlip, anchor, 0.0);
}
void sepConv2D_Y_X(Mat src, Mat src_kerY_kerX, int ddepth, Mat kernelY, Mat kernelX, Point2f anchor)
{
    //输入矩阵与垂直方向上的卷积核的卷积
    Mat src_kerY;
    conv2D(src, kernelY, src_kerY, ddepth, anchor);
    //得到上面的卷积结果,接着和水平方向上的卷积核卷积
    conv2D(src_kerY, kernelX, src_kerY_kerX, ddepth, anchor);
}

void margin::roberts(Mat src, Mat dst, int ddepth, int x, int y)
{
    CV_Assert(!(x == 0 && y == 0)); //若括号中的表达式值为false,则返回一个错误信息
    Mat roberts_1 = (Mat_<float>(2, 2) << 1, 0, 0, -1);
    Mat roberts_2 = (Mat_<float>(2, 2) << 0, 1, -1, 0);
    //x!=0时,135型卷积
    if (x != 0 && y == 0)
    {
        conv2D(src,roberts_1,dst,ddepth,Point(0,0));
    }
    //y!=0时,45型卷积
    if (y != 0 && x == 0)
    {
        conv2D(src, roberts_2, dst, ddepth, Point(1,0));
    }
}
  • 写回答

1条回答 默认 最新

  • 爷就是这个范儿 2021-10-26 13:50
    关注

    参数类型不一致

    评论

报告相同问题?

问题事件

  • 创建了问题 10月26日

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧