Неопределенная ссылка на «cv::optflow::createOptFlow_DualTVL1()»

#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, и она работает. Не уверен, что сейчас происходит.