Ask Your Question
0

undefined reference to `cv::detail::ExposureCompensator::createDefault(int)'

asked 2018-07-30 04:26:00 -0600

prafull.g gravatar image

updated 2018-07-30 06:34:13 -0600

berak gravatar image

Hello, my project was running successfully with openCV 3.3.0 version. when i upgrade openCV version to 3.4.2 I get below linking errors.

Eraser::exposureCompensate(cv::Mat&, cv::Mat&)':
 undefined reference to `cv::detail::ExposureCompensator::createDefault(int)'
undefined reference to `cv::detail::ExposureCompensator::feed(std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > > const&, std::vector<cv::UMat, std::allocator<cv::UMat> > const&, std::vector<cv::UMat, std::allocator<cv::UMat> > const&)

Thanks

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted
0

answered 2018-07-30 05:08:17 -0600

LBerger gravatar image

updated 2018-07-30 05:11:08 -0600

Can you show us your code ? Which library do you give in link command line ?

This line works in opencv 4.0.0pre

    #include <opencv2/opencv.hpp>
    using namespace cv;
    using namespace cv::detail;
    void main(){
    Ptr<ExposureCompensator> algoCorrectExpo;
    algoCorrectExpo = ExposureCompensator::createDefault(ExposureCompensator::GAIN_BLOCKS);
edit flag offensive delete link more

Comments

1

In openCV 3.3.0 and 3.4.0 there was no issue. but from 3.4.1 version, i am facing problem.

#include <opencv2/imgproc.hpp>
#include <opencv2/core.hpp>
#include <opencv2/stitching/detail/exposure_compensate.hpp>
#include <opencv2/stitching/detail/util.hpp>


.....
const int expos_comp_type = detail::ExposureCompensator::GAIN_BLOCKS;
    Ptr<ExposureCompensator> compensator = ExposureCompensator::createDefault(expos_comp_type);

....
compensator->feed(corners, images_u, masks_u);

    // get the background img
    compensator->apply(0, corners[0], result, thresh_erase_mask);
prafull.g gravatar imageprafull.g ( 2018-07-30 05:21:43 -0600 )edit

Which library do you give in link command line ?

LBerger gravatar imageLBerger ( 2018-07-30 05:32:42 -0600 )edit

Are you sure that images_u and mask_u type is vector<umat> ?

LBerger gravatar imageLBerger ( 2018-07-30 07:13:01 -0600 )edit

please find code snippet: /++++++++++++++++++++/

void Eraser::exposureCompensate(Mat &match_img, Mat &result)
{
    const int expos_comp_type = detail::ExposureCompensator::GAIN_BLOCKS;
    Ptr<ExposureCompensator> compensator = ExposureCompensator::createDefault(expos_comp_type);
    ...
Mat resize_match_img;
    resize(match_img, resize_match_img, Size(0,0), scale_factor, scale_factor);
Mat resize_thresh_erase_mask;
    resize(thresh_erase_mask, resize_thresh_erase_mask, Size(0,0), scale_factor, scale_factor);
    vector<Point> corners;
vector<Mat> images, masks;
    vector<UMat> images_u, masks_u;
...
compensator->feed(corners, images_u, masks_u);
compensator->apply(0, corners[0], result, thresh_erase_mask);
prafull.g gravatar imageprafull.g ( 2018-07-30 22:54:40 -0600 )edit

@LBerger : Can you please help me resolving above issue ?

prafull.g gravatar imageprafull.g ( 2018-08-01 06:12:40 -0600 )edit

I don't know what could be the problem but I can compile and link and run this example using same method. What is thresh_erase_mask type ?

LBerger gravatar imageLBerger ( 2018-08-01 07:14:25 -0600 )edit

cv::Mat thresh_erase_mask, thresh_match_mask;

prafull.g gravatar imageprafull.g ( 2018-08-01 07:16:17 -0600 )edit

try with UMat (declared here)

LBerger gravatar imageLBerger ( 2018-08-01 07:26:03 -0600 )edit

I wonder, how UMat can solve linking problem. Eraser::exposureCompensate(cv::Mat&, cv::Mat&)': undefined reference to cv::detail::ExposureCompensator::createDefault(int)' undefined reference tocv::detail::ExposureCompensator::feed(std::vector<cv::point_<int>, std::allocator<cv::point_<int> > > const&, std::vector<cv::umat, std::allocator<cv::umat=""> > const&, std::vector<cv::umat, std::allocator<cv::umat=""> > const&)

openCV 4.0 is not available on openCV releases. So i can not test this version.

prafull.g gravatar imageprafull.g ( 2018-08-01 07:34:07 -0600 )edit

can you compile and link https://github.com/D-BookeR/Traitemen... or https://github.com/opencv/opencv/blob...

Just rebuild opencv 3.4.2 and of course there is no problem with stitchin module (example https://github.com/D-BookeR/Traitemen... or https://github.com/opencv/opencv/blob...)

LBerger gravatar imageLBerger ( 2018-08-01 08:10:11 -0600 )edit

"openCV 4.0 is not available on openCV releases. So i can not test this version." this version works with opencv 3.1, 3.2 3.3 and 4.0

LBerger gravatar imageLBerger ( 2018-08-01 08:13:50 -0600 )edit

@LBerger : from where i can get openCV 4.0 source code and libs ? Its not available on site.

prafull.g gravatar imageprafull.g ( 2018-08-02 02:57:09 -0600 )edit

Problem is not here. What is exactly your configuration : system- opencv version- compiler?

Have you try to build https://github.com/opencv/opencv/blob... ?

LBerger gravatar imageLBerger ( 2018-08-02 03:02:57 -0600 )edit

i am building code in android studio on Windows 7. below is build.gradle of openCV 3.4.2 android { compileSdkVersion 25 buildToolsVersion "25.0.3"

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 25
}

}

If any other information required, please let me know.

prafull.g gravatar imageprafull.g ( 2018-08-02 03:11:22 -0600 )edit

@LBerger as per your suggestions, i have created openCV demo project. Still i am facing same error. /Android/Jnidemo/app/src/main/jni/Hellojni.cpp:13: error: undefined reference to 'cv::detail::ExposureCompensator::createDefault(int)' clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation) /++++/

include <jni.h>

include <opencv2 stitching="" detail="" exposure_compensate.hpp="">

using namespace cv; using namespace cv::detail;

JNIEXPORT void JNICALL Java_com_samsung_android_demo_MainActivity_getMessage(JNIEnv *env, jobject instance) { Ptr<exposurecompensator> algoCorrectExpo; algoCorrectExpo = ExposureCompensator::createDefault(ExposureCompensator::GAIN_BLOCKS); }

prafull.g gravatar imageprafull.g ( 2018-08-07 02:36:17 -0600 )edit

Android.mk LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS) include ../OpenCV-android-sdk/sdk/native/jni/OpenCV.mk LOCAL_MODULE := Hello-jni LOCAL_SRC_FILES := Hellojni.cpp LOCAL_LDLIBS += -lm -llog -landroid -lc -ldl -lz -lEGL -lGLESv2

include $(BUILD_SHARED_LIBRARY)

Application.mk APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_ABI := armeabi-v7a APP_PLATFORM := android-8

build.gradle defaultConfig { applicationId "com.google.android.demo" versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk { abiFilters 'armeabi-v7a' } }

externalNativeBuild { ndkBuild { path "src/main/jni/Android.mk" } }

prafull.g gravatar imageprafull.g ( 2018-08-07 02:38:05 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2018-07-30 04:26:00 -0600

Seen: 341 times

Last updated: Jul 30 '18