当前位置: 首页 > 工具软件 > Go sift > 使用案例 >

‘SIFT‘ is not a member of ‘cv‘ 的解决办法

充浩波
2023-12-01

在golang中使用opencv,已经在本地安装了opencv-v4.3.0,运行如下代码:

package main

import (
	"fmt"

	"gocv.io/x/gocv"
)

func main() {
	fmt.Printf("gocv version: %s\n", gocv.Version())
	fmt.Printf("opencv lib version: %s\n", gocv.OpenCVVersion())
}

报错:'SIFT' is not a member of 'cv' typedef cv::Ptr<cv::SIFT>* SIFT;

原因:在go mod tidy 时,使用gocv的其他版本,与opencv 4.3.0的版本冲突
解决办法:修改 go.mod中gocv包的版本,将其改为0.23.0版

require gocv.io/x/gocv v0.30.0 改为 require gocv.io/x/gocv v0.23.0

修改后再次go mod tidy即可。

重新运行程序,成功运行结果:

gocv version: 0.23.0
opencv lib version: 4.3.0

总结:依赖库的版本(golang为gocv)与 opencv版本 的版本冲突,会导致此类问题;

其他语言,遇到这类问题,可能也是依赖库版本与opencv版本冲突导致,如python的opencv-contrib-python库的版本,可以参考这个解决。

为啥说到其他语言呢,因为昨晚遇到这个问题,第一时间度了,结果搜索了一大堆都是其他语言遇到的这个问题,golang貌似使用opencv的文档很少,这一大堆的解决方法都试了下,并没有能解决问题,也没有提到是依赖库版本与opencv版本不对应导致的,还是自己摸索吧,一不小心又熬夜了。。。

在此记录下,以后少熬夜,大家也少熬夜

 类似资料: