cv :: Mat aaa()之间的区别; 和cv :: Mat aaa = cv :: Mat();

Jak*_*aka 2 c++ opencv

在我的应用程序中,我有一个通过引用接收cv :: Mat对象的函数.这是函数的声明:

     void getChains(cv::Mat &img,std::vector<chain> &chains,cv::Mat &ch,char p=0,int sx=0,int sy=0);
Run Code Online (Sandbox Code Playgroud)

这个函数是递归的,并且在main函数的第一次调用时并不需要aaa,所以我只是声明了一个空的aaa来将它传递给函数调用.在随后的递归调用函数中生成自己的ch Mat对象.

std::vector<chain> chains1;
cv::Mat aaa();

getChains(bin1,chains1,aaa);
Run Code Online (Sandbox Code Playgroud)

但是,编译器返回错误:

main.cpp:75:错误:从类型为'cv :: Mat(*)()的临时类型'cv :: Mat&'的非const引用无效初始化'aux.h:21:错误:传递参数3'void getChains(cv :: Mat&,std :: vector>&,cv :: Mat&,char,int,int)'

如果我改变aaa声明

        cv::Mat aaa=cv::Mat();
Run Code Online (Sandbox Code Playgroud)

它编译没有问题.

该函数被传递一个二进制图像img,并获得像素粘在一起(链)的所有像素组,并将所有像素的坐标存储在链矢量中.在openCV中是否已经存在一个类似的东西?

谢谢

cop*_*roc 5

这是一个函数定义:cv::Mat aaa();.你真正想写的是cv::Mat aaa;