#opencv #go
#opencv #Вперед
Вопрос:
Я успешно установил gocv
пакет из https://github.com/hybridgroup/gocv и я пытаюсь запустить код на C , который я поместил в библиотеку C внутри моего проекта Go. Но, похоже, возникает проблема, когда я пытаюсь вызвать cv::optflow::createOptFlow_DualTVL1()
метод. Я получаю ошибку с неопределенной ссылкой. Я не знаю почему, поскольку в optflow.hpp
файле есть метод, вызываемый createOptFlow_DualTVL1()
Вот мой main.go
файл:
package main
/*
#cgo LDFLAGS: -L/usr/local/lib -lopencv_core -lopencv_video -lopencv_videoio -lopencv_highgui -lopencv_tracking -lopencv_optflow
#include "dense_flow.h"
*/
import (
"C"
"gocv.io/x/gocv"
)
func main(){
}
ПРИМЕЧАНИЕ: dense_flow.h
здесь я объявил свою CalculateT4VL1()
функцию, которая вызывает createOptFlow_DualTVL1()
внутри dense_flow.cpp
файла.
Операционная система и версия: Ubuntu 18.04
Используемая версия OpenCV: 4.0.0
Используемая версия GoCV: 0.18
Версия Go: 1.12
Ответ №1:
Этот оптический поток импортирован из модуля contrib. Вам нужен расширенный импорт ( https://github.com/hybridgroup/gocv/tree/master/contrib ): «gocv.io/x/gocv/contrib «
Комментарии:
1. На самом деле алгоритм, который я пытаюсь использовать, не является частью этого модуля. Вот почему я оборачиваю код C в C, который я пытаюсь использовать в Go.
2. Ошибка неопределенной ссылки говорит о том, что компоновщику нужен объект с реализацией: *.o или *.obj, *.a или *.lib. Реализация этой функции находится здесь: github.com/opencv/opencv_contrib/blob/… . И нужна ли вам ссылка на библиотеку opencv_optflow.
3. Ну, если у меня есть все в моем каталоге / usr / local / include, я не понимаю, как он не может это найти? Поскольку я запустил тестовую программу, которая использует opencv_video, и она работает. Не уверен, что сейчас происходит.