Opencv golang gocv运行时出错。/cmd/version/main.go

Opencv golang gocv运行时出错。/cmd/version/main.go,opencv,go,gocv,Opencv,Go,Gocv,我在Golang是个新手,在安装gocv时遇到了一些问题。 我不知道知道这是不是无济于事,但是 我在版本5.19.3上使用Manjaro Linux,当前的go版本是1.14.2,最后但并非最不重要的是在版本10.1.0(amd64)上使用gccgo。 我按照上所述安装了gocv 如果工作正常,应显示以下消息: gocv version: 0.24.0 opencv lib version: 4.4.0 #gocv.io/x/gocv 在features2d.cpp中包含的文件中:1: fea

我在Golang是个新手,在安装gocv时遇到了一些问题。 我不知道知道这是不是无济于事,但是 我在版本5.19.3上使用Manjaro Linux,当前的go版本是1.14.2,最后但并非最不重要的是在版本10.1.0(amd64)上使用gccgo。
我按照上所述安装了gocv

如果工作正常,应显示以下消息:

gocv version: 0.24.0
opencv lib version: 4.4.0
#gocv.io/x/gocv
在features2d.cpp中包含的文件中:1:
features2d.h:22:21:错误:“SIFT”不是“cv”的成员
22 |类型定义cv::Ptr*SIFT;
|                     ^~~~
features2d.h:22:21:错误:“SIFT”不是“cv”的成员
features2d.h:22:25:错误:模板参数1无效
22 |类型定义cv::Ptr*SIFT;
|                         ^
features2d.cpp:在函数“int*SIFT_Create()”中:
features2d.cpp:434:28:错误:“SIFT”不是“cv”的成员;你是说“筛选”吗?
434 |返回新的cv::Ptr(cv::SIFT::create());
|                            ^~~~
在features2d.cpp中包含的文件中:1:
特征2d.h:22:28:注:此处声明“筛选”
22 |类型定义cv::Ptr*SIFT;
|                            ^~~~
features2d.cpp:434:28:错误:“SIFT”不是“cv”的成员;你是说“筛选”吗?
434 |返回新的cv::Ptr(cv::SIFT::create());
|                            ^~~~
在features2d.cpp中包含的文件中:1:
特征2d.h:22:28:注:此处声明“筛选”
22 |类型定义cv::Ptr*SIFT;
|                            ^~~~
features2d.cpp:434:32:错误:模板参数1无效
434 |返回新的cv::Ptr(cv::SIFT::create());
|                                ^
features2d.cpp:434:38:错误:“cv::SIFT”尚未声明
434 |返回新的cv::Ptr(cv::SIFT::create());
|                                      ^~~~
功能2d.cpp:在“关键点筛选检测(筛选,Mat)”功能中:
features2d.cpp:443:9:错误:“->”的基操作数不是指针
443 |(*d)->检测(*src,检测到);
|         ^~
功能2d.cpp:在“关键点筛选检测和计算(筛选、筛选、筛选、筛选)”功能中:
features2d.cpp:460:9:错误:“->”的基操作数不是指针
460 |(*d)->detectAndCompute(*src,*mask,detected,*desc);
|         ^~
费勒:鲁克加贝维特2号项目。
我试图在互联网上找到一个解决方案,但我甚至不理解这个问题。 我希望有人能帮助我。 顺致敬意, Felix

SIFT(缩放不变特征变换)算法是一种专利算法,如果需要按如下方式使用,则需要用户导入非自由头文件:

#include <opencv2/nonfree/nonfree.hpp>
#包括
然而,到目前为止,该专利已经过期。(OpenCV 4.4.0),所以这个包被移动到OpenCV的主存储库(检查版本高亮)

因此,使用SIFT的gocv存储库已更新,以从opencv主存储库获取该算法,如下所示(在gocv v0.24.0更改日志中:)

typedef cv::Ptr*SIFT;
这是导致生成失败的更新代码行。(只有在未使用opencv 4.4.0时,才会出现此错误,您可以检查正在使用的MakeFile)

要解决此问题,您可以尝试再次获取/更新gocv存储库,因为他们已经将所有MakeFile更新为使用opencv 4.4.0。或者您可以手动更新MakeFile,将opencv版本更改为4.4.0

SIFT(缩放不变特征变换)算法是一种专利算法,如果您需要按如下方式使用它,则需要用户导入非自由头文件:

#include <opencv2/nonfree/nonfree.hpp>
#包括
然而,到目前为止,该专利已经过期。(OpenCV 4.4.0),所以这个包被移动到OpenCV的主存储库(检查版本高亮)

因此,使用SIFT的gocv存储库已更新,以从opencv主存储库获取该算法,如下所示(在gocv v0.24.0更改日志中:)

typedef cv::Ptr*SIFT;
这是导致生成失败的更新代码行。(只有在未使用opencv 4.4.0时,才会出现此错误,您可以检查正在使用的MakeFile)


要解决此问题,您可以尝试再次获取/更新gocv存储库,因为他们已经将所有MakeFile更新为使用opencv 4.4.0。或者您可以手动更新您的MakeFile,将opencv版本更改为4.4.0

我认为MakeFile不支持arch。请查看完整输出?不仅仅是编译器的抱怨。(它会用英语吗?)。也就是说,您可以手动设置依赖项,然后构建gocv。如果环境变量配置正确,这应该是现成的。或者,如果您不需要GUI,您可以在docker上运行它。另外,检查github回购协议的问题报告,这可能会有所帮助。你知道gocv是C库opencv的包装器吗?需要安装这些。Makefile不支持Arch软件包管理器?因此,您必须首先自己安装它们。您也可以使用Makefile中提供的预配置docker映像。我认为arch不受Makefile支持。请查看是否显示完整输出?不仅仅是编译器的抱怨。(它会用英语吗?)。也就是说,您可以手动设置依赖项,然后构建gocv。如果环境变量配置正确,这应该是现成的。或者,如果您不需要GUI,您可以在docker上运行它。另外,检查github回购协议的问题报告,这可能会有所帮助。你知道gocv是C库opencv的包装器吗?需要安装这些。Makefile不支持Arch软件包管理器?因此,您必须首先自己安装它们
#include <opencv2/nonfree/nonfree.hpp>
typedef cv::Ptr<cv::SIFT>* SIFT;