Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segfault with vpCannyEdgeDetection with a certain image #1487

Closed
s-trinh opened this issue Oct 21, 2024 · 14 comments
Closed

Segfault with vpCannyEdgeDetection with a certain image #1487

s-trinh opened this issue Oct 21, 2024 · 14 comments
Labels

Comments

@s-trinh
Copy link
Contributor

s-trinh commented Oct 21, 2024

Hello,

With the following image, I encounter a segfault with ViSP v3.6.0-1651-ga65eebc2f-dirty.
img

Code to reproduce the issue:

#include <iostream>
#include <visp3/core/vpConfig.h>
#include <visp3/core/vpIoTools.h>
#include <visp3/core/vpCannyEdgeDetection.h>
#include <visp3/io/vpImageIo.h>

int main(int argc, const char **argv)
{
  std::cout << "getBuildInformation()\n" << vpIoTools::getBuildInformation() << std::endl;

  int gaussianKernelSize = 3;
  float gaussianStdev = 0.5f;
  int apertureSize = 3;
  // Canny parameters
  float lowerThresh = -1.;
  float upperThresh = -1.;
  float lowerThreshRatio = 0.6f;
  float upperThreshRatio = 1.5f;
  vpImageFilter::vpCannyFilteringAndGradientType filteringType = vpImageFilter::CANNY_GBLUR_SOBEL_FILTERING;

  vpCannyEdgeDetection cannyDetector(gaussianKernelSize, gaussianStdev, apertureSize,
                                    lowerThresh, upperThresh, lowerThreshRatio, upperThreshRatio,
                                    filteringType);

  vpImage<unsigned char> I_gray;
  vpImageIo::read(I_gray, "/tmp/img.png");
  std::cout << "I_gray=" << I_gray.getWidth() << "x" << I_gray.getHeight() << std::endl;

  vpImage<unsigned char> I_canny_visp;
  I_canny_visp = cannyDetector.detect(I_gray);

  return EXIT_SUCCESS;
}

gdb stack trace:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff77fe8c1 in __dcigettext (domainname=0x0, msgid1=0x7ffff7ecec00 "map::at", msgid2=0x0, plural=0, n=0, category=5) at dcigettext.c:521
521	dcigettext.c: Aucun fichier ou dossier de ce type.
(gdb) bt
#0  0x00007ffff77fe8c1 in __dcigettext (domainname=0x0, msgid1=0x7ffff7ecec00 "map::at", msgid2=0x0, plural=0, n=0, category=5) at dcigettext.c:521
#1  0x00007ffff7a7731b in std::__throw_out_of_range(char const*) () at /lib/x86_64-linux-gnu/libstdc++.so.6
#2  0x00007ffff7ca5688 in std::map<std::pair<unsigned int, unsigned int>, vpCannyEdgeDetection::EdgeType, std::less<std::pair<unsigned int, unsigned int> >, std::allocator<std::pair<std::pair<unsigned int, unsigned int> const, vpCannyEdgeDetection::EdgeType> > >::at(std::pair<unsigned int, unsigned int> const&) (__k={...}, this=0x7fffffffdca8) at /usr/include/c++/9/bits/stl_pair.h:454
#3  vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:547
#4  0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#5  0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#6  0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#7  0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#8  0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#9  0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#10 0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#11 0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#12 0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})
    at visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#13 0x00007ffff7ca57a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffdb60, coordinates={...})

Looks like using the following guard does not help:

diff --git a/modules/core/src/image/vpCannyEdgeDetection.cpp b/modules/core/src/image/vpCannyEdgeDetection.cpp
index 310814709..ac727c9ce 100644
--- a/modules/core/src/image/vpCannyEdgeDetection.cpp
+++ b/modules/core/src/image/vpCannyEdgeDetection.cpp
@@ -544,14 +544,16 @@ vpCannyEdgeDetection::recursiveSearchForStrongEdge(const std::pair<unsigned int,
         try {
           std::pair<unsigned int, unsigned int> key_candidate(idRow, idCol);
           // Checking if the 8-neighbor point is in the list of edge candidates
-          EdgeType type_candidate = m_edgePointsCandidates.at(key_candidate);
-          if (type_candidate == STRONG_EDGE) {
-            // The 8-neighbor point is a strong edge => the weak edge becomes a strong edge
-            hasFoundStrongEdge = true;
-          }
-          else if (type_candidate == WEAK_EDGE) {
-            // Checking if the WEAK_EDGE neighbor has a STRONG_EDGE neighbor
-            hasFoundStrongEdge = recursiveSearchForStrongEdge(key_candidate);
+          if (m_edgePointsCandidates.find(key_candidate) != m_edgePointsCandidates.end()) {
+            EdgeType type_candidate = m_edgePointsCandidates.at(key_candidate);
+            if (type_candidate == STRONG_EDGE) {
+              // The 8-neighbor point is a strong edge => the weak edge becomes a strong edge
+              hasFoundStrongEdge = true;
+            }
+            else if (type_candidate == WEAK_EDGE) {
+              // Checking if the WEAK_EDGE neighbor has a STRONG_EDGE neighbor
+              hasFoundStrongEdge = recursiveSearchForStrongEdge(key_candidate);
+            }
           }
         }
         catch (...) {
@rolalaro
Copy link

Hello,
That's weird I cannot reproduce your error using the same parameters.
Could you please run the following:

$ cd $VISP_WS/visp-build/tutorial/image
$ ./tutorial-canny -i /tmp/img.png --ratio 0.6 1.5 --gradient 3 0.5 --aperture 3

On my computer (Ubuntu 22.04) the program works correctly (even if the Canny results are a bit odd due to the exposure of the image)

@s-trinh
Copy link
Contributor Author

s-trinh commented Oct 28, 2024

Yes I have the same issue with ./tutorial-canny -i /tmp/img.png --ratio 0.6 1.5 --gradient 3 0.5 --aperture 3

ViSP-third-party.txt
==========================================================
General configuration information for ViSP 3.6.1

  Version control:               v3.6.0-1651-ga65eebc2f

  Platform:
    Timestamp:                   2023-11-15T22:24:52Z
    Host:                        Linux 5.15.0-84-generic x86_64
    CMake:                       3.16.3
    CMake generator:             Unix Makefiles
    CMake build tool:            /usr/bin/make
    Configuration:               RelWithDebInfo

  System information:
    Number of CPU logical cores: 16
    Number of CPU physical cores: 8
    Total physical memory (in MiB): 15689
    OS name:                     Linux
    OS release:                  5.15.0-124-generic
    OS version:                  #134~20.04.1-Ubuntu SMP Tue Oct 1 15:27:33 UTC 2024
    OS platform:                 x86_64
    CPU name:                    Unknown P6 family
    Is the CPU 64-bit?           yes
    Does the CPU have FPU?       yes
    CPU optimization:            SSE2 SSE3 SSSE3

  C/C++:
    Built as dynamic libs?:      yes
    C++ Compiler:                /usr/bin/c++  (ver 9.4.0)
    C++ flags (Release):         -Wall -Wextra -fopenmp -pthread -std=c++17 -fvisibility=hidden -mavx -fPIC -O3 -DNDEBUG
    C++ flags (Debug):           -Wall -Wextra -fopenmp -pthread -std=c++17 -fvisibility=hidden -mavx -fPIC -g
    C Compiler:                  /usr/bin/cc
    C flags (Release):           -Wall -Wextra -fopenmp -pthread -std=c++17 -fvisibility=hidden -mavx -fPIC -O3 -DNDEBUG
    C flags (Debug):             -Wall -Wextra -fopenmp -pthread -std=c++17 -fvisibility=hidden -mavx -fPIC -g
    Linker flags (Release):
    Linker flags (Debug):
    Use cxx standard:            17

  ViSP modules:
    To be built:                 core gui imgproc io java_bindings_generator klt me sensor ar blob robot visual_features vs vision detection mbt tt tt_mi
    Disabled:                    -
    Disabled by dependency:      -
    Unavailable:                 java
    Enable visp namespace:       no
    Enable explicit keyword:     no

  Python 3:
    Interpreter:                 /usr/bin/python3.8 (ver 3.8.10)

  Java:                          
    ant:                         no
    JNI:                         no

  Python3 bindings:              no
    Requirements: 
      Python version > 3.7.0:    ok (ver 3.8.10)
      Python in Virtual environment or conda:
                                 failed
      Pybind11 found:            failed
      CMake > 3.19.0:            failed (3.16.3)
      C++ standard > 201703L:    ok (201703L)

  Build options: 
    Build deprecated:            yes
    Build with moment combine:   no

  OpenCV: 
    Version:                     4.10.0
    Modules:                     calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo stitching video videoio dnn_objdetect dnn_superres xfeatures2d
    OpenCV dir:                  <>/opencv_build/install/lib/cmake/opencv4

  YARP: 
    Version:                     n/a

  Mathematics: 
    Blas/Lapack:                 yes
    \- Use MKL:                  no
    \- Use OpenBLAS:             no
    \- Use Atlas:                no
    \- Use Netlib:               no
    \- Use GSL:                  no
    \- Use Lapack (built-in):    yes (ver 3.2.1)
    Use Eigen3:                  yes (ver 3.3.7)
    Use OpenCV:                  yes (ver 4.10.0)

  Simulator: 
    Ogre simulator: 
    \- Use Ogre3D:               no
    \- Use OIS:                  no
    Coin simulator: 
    \- Use Coin3D:               no
    \- Use SoWin:                no
    \- Use SoXt:                 no
    \- Use SoQt:                 no
    \- Use Qt5:                  no
    \- Use Qt4:                  no
    \- Use Qt3:                  no
    Panda3D:                     no

  Media I/O: 
    Use JPEG:                    no
    Use PNG:                     yes (ver 1.6.37)
    \- Use ZLIB:                 yes (ver 1.2.11)
    Use OpenCV:                  yes (ver 4.10.0)
    Use stb_image (built-in):    yes (ver 2.30.0)
    Use TinyEXR (built-in):      yes (ver 1.0.9)
    Use simdlib (built-in):      yes
    Use npz I/O (built-in):      yes

  Real robots: 
    Use Afma4:                   no
    Use Afma6:                   no
    Use Franka:                  no
    Use Viper650:                no
    Use Viper850:                no
    Use ur_rtde:                 no
    Use Kinova Jaco:             no
    Use aria (Pioneer):          no
    Use PTU46:                   no
    Use Biclops PTU:             no
    Use Flir PTU SDK:            no
    Use MAVSDK:                  no
    Use Parrot ARSDK:            no
    \-Use ffmpeg:                no
    Use Virtuose:                no
    Use qbdevice (built-in):     yes (ver 2.6.0)
    Use takktile2 (built-in):    yes (ver 1.0.0)
    Use pololu (built-in):       yes (ver 1.0.0)

  GUI: 
    Use X11:                     yes
    Use GTK:                     no
    Use OpenCV:                  yes (ver 4.10.0)
    Use GDI:                     no
    Use Direct3D:                no

  Cameras: 
    Use DC1394-2.x:              no
    Use CMU 1394:                no
    Use V4L2:                    yes (ver 1.18.0)
    Use directshow:              no
    Use OpenCV:                  yes (ver 4.10.0)
    Use FLIR Flycapture:         no
    Use Basler Pylon:            no
    Use IDS uEye:                no

  RGB-D sensors: 
    Use Realsense:               no
    Use Realsense2:              yes (ver 2.54.2)
    Use Occipital Structure:     no
    Use Kinect:                  no
    \- Use libfreenect:          no
    \- Use libusb-1:             yes (ver 1.0.23)
    \- Use std::thread:          yes
    Use PCL:                     no
    \- Use VTK:                  no

  F/T sensors: 
    Use atidaq (built-in):       no
    Use comedi:                  no
    Use IIT SDK:                 no

  Mocap: 
    Use Qualisys:                no
    Use Vicon:                   no

  Detection: 
    Use zbar:                    no
    Use dmtx:                    no
    Use AprilTag (built-in):     yes (ver 3.4.2)
    \- Use AprilTag big family:  no

  Misc: 
    Use Clipper (built-in):      yes (ver 6.4.2)
    Use pugixml (built-in):      yes (ver 1.14.0)
    Use libxml2:                 no
    Use json (nlohmann):         no

  Optimization: 
    Use OpenMP:                  yes
    Use std::thread:             yes
    Use pthread:                 yes
    Use simdlib (built-in):      yes

  DNN: 
    Use CUDA Toolkit:            no
    Use TensorRT:                no

  Documentation: 
    Use doxygen:                 yes
    \- Use mathjax:              yes

  Tests and samples:
    Use catch2 (built-in):       yes (ver 3.7.1)
    Tests:                       yes
    Apps:                        yes
    Demos:                       no
    Examples:                    yes
    Tutorials:                   yes
    Dataset found:               yes (ver 3.6.0 in <>/visp-images)

  Library dirs:
    Eigen3 include dir:          /usr/lib/cmake/eigen3
    OpenCV dir:                  <>/opencv_build/install/lib/cmake/opencv4

  Install path:                  <>/visp-build/install

==========================================================

Increasing the stack size did not help:

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 62389
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 62389
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ulimit -s 16384

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 62389
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 16384
cpu time               (seconds, -t) unlimited
max user processes              (-u) 62389
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

gdb
gdb ./tutorial-canny
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.2) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./tutorial-canny...
(gdb) r -i /tmp/img.png --ratio 0.6 1.5 --gradient 3 0.5 --aperture 3
Starting program: <>/visp-build/tutorial/image/tutorial-canny -i /tmp/img.png --ratio 0.6 1.5 --gradient 3 0.5 --aperture 3
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Detaching after vfork from child process 47208]
[Detaching after vfork from child process 47213]
Canny Configuration:
	Filtering + gradient operators = gaussianblur+sobel-filtering
	Gaussian filter kernel size = 3
	Gaussian filter standard deviation = 0.500000
	Gradient filter kernel size = 3
	Canny edge filter thresholds = [-1.000000 ; -1.000000]
	Canny edge filter thresholds ratio (for auto-thresholding) = [0.600000 ; 1.500000]


Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7c6d525 in vpCannyEdgeDetection::recursiveSearchForStrongEdge (this=0x7fffffffd9a0, coordinates={...}) at <>/visp/modules/core/src/image/vpCannyEdgeDetection.cpp:515
515	  int nbRows = m_dIx.getRows();
(gdb) bt
#0  0x00007ffff7c6d525 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffd9a0, coordinates={...})
    at <>/visp/modules/core/src/image/vpCannyEdgeDetection.cpp:515
#1  0x00007ffff7c6d7a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffd9a0, coordinates={...})
    at <>/visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554
#2  0x00007ffff7c6d7a6 in vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (this=0x7fffffffd9a0, coordinates={...})
    at <>/visp/modules/core/src/image/vpCannyEdgeDetection.cpp:554

Valgrind (`Stack overflow in thread #1: can't grow stack to 0x1ffe801000`)
==48425== Memcheck, a memory error detector
==48425== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==48425== Using Valgrind-3.15.0-608cb11914-20190413 and LibVEX; rerun with -h for copyright info
==48425== Command: ./tutorial-canny -i /tmp/img.png --ratio 0.6 1.5 --gradient 3 0.5 --aperture 3
==48425== Parent PID: 47465
==48425== 
--48425-- 
--48425-- Valgrind options:
--48425--    --leak-check=full
--48425--    --track-origins=yes
--48425--    --verbose
--48425--    --log-file=valgrind-out_2.txt
--48425-- Contents of /proc/version:
--48425--   Linux version 5.15.0-124-generic (buildd@lcy02-amd64-092) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #134~20.04.1-Ubuntu SMP Tue Oct 1 15:27:33 UTC 2024
--48425-- 
--48425-- Arch and hwcaps: AMD64, LittleEndian, amd64-cx16-lzcnt-rdtscp-sse3-ssse3-avx-avx2-bmi-f16c-rdrand
--48425-- Page sizes: currently 4096, max supported 4096
--48425-- Valgrind library directory: /usr/lib/x86_64-linux-gnu/valgrind
--48425-- Reading syms from <>/visp-build/tutorial/image/tutorial-canny
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/ld-2.31.so
--48425--   Considering /usr/lib/debug/.build-id/db/0420f708b806cf03260aadb916c330049580b7.debug ..
--48425--   .. build-id is valid
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/valgrind/memcheck-amd64-linux
--48425--    object doesn't have a symbol table
--48425--    object doesn't have a dynamic symbol table
--48425-- Scheduler: using generic scheduler lock implementation.
--48425-- Reading suppressions file: /usr/lib/x86_64-linux-gnu/valgrind/default.supp
==48425== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-48425-by-user-on-???
==48425== embedded gdbserver: writing to   /tmp/vgdb-pipe-to-vgdb-from-48425-by-user-on-???
==48425== embedded gdbserver: shared mem   /tmp/vgdb-pipe-shared-mem-vgdb-48425-by-user-on-???
==48425== 
==48425== TO CONTROL THIS PROCESS USING vgdb (which you probably
==48425== don't want to do, unless you know exactly what you're doing,
==48425== or are doing some strange experiment):
==48425==   /usr/lib/x86_64-linux-gnu/valgrind/../../bin/vgdb --pid=48425 ...command...
==48425== 
==48425== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==48425==   /path/to/gdb ./tutorial-canny
==48425== and then give GDB the following command
==48425==   target remote | /usr/lib/x86_64-linux-gnu/valgrind/../../bin/vgdb --pid=48425
==48425== --pid is optional if only one valgrind process is running
==48425== 
--48425-- REDIR: 0x4022e20 (ld-linux-x86-64.so.2:strlen) redirected to 0x580c9ce2 (???)
--48425-- REDIR: 0x4022bf0 (ld-linux-x86-64.so.2:index) redirected to 0x580c9cfc (???)
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_core-amd64-linux.so
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so
--48425--    object doesn't have a symbol table
==48425== WARNING: new redirection conflicts with existing -- ignoring it
--48425--     old: 0x04022e20 (strlen              ) R-> (0000.0) 0x580c9ce2 ???
--48425--     new: 0x04022e20 (strlen              ) R-> (2007.0) 0x0483f060 strlen
--48425-- REDIR: 0x401f600 (ld-linux-x86-64.so.2:strcmp) redirected to 0x483ffd0 (strcmp)
--48425-- REDIR: 0x4023380 (ld-linux-x86-64.so.2:mempcpy) redirected to 0x4843a20 (mempcpy)
--48425-- Reading syms from <>/visp-build/lib/libvisp_gui.so.3.6.1
--48425-- Reading syms from <>/visp-build/lib/libvisp_io.so.3.6.1
--48425-- Reading syms from <>/visp-build/lib/libvisp_core.so.3.6.1
--48425-- Reading syms from <>/opencv_build/install/lib/libopencv_core.so.4.10.0
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libm-2.31.so
--48425--   Considering /usr/lib/debug/.build-id/8d/2573eff281739f0e2b0eb710c860ce0b7261cf.debug ..
--48425--   .. build-id is valid
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libc-2.31.so
--48425--   Considering /usr/lib/debug/.build-id/07/02430aef5fa3dda43986563e9ffcc47efbd75e.debug ..
--48425--   .. build-id is valid
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from <>/opencv_build/install/lib/libopencv_imgproc.so.4.10.0
--48425-- Reading syms from <>/opencv_build/install/lib/libopencv_highgui.so.4.10.0
--48425-- Reading syms from <>/opencv_build/install/lib/libopencv_videoio.so.4.10.0
--48425-- Reading syms from <>/opencv_build/install/lib/libopencv_imgcodecs.so.4.10.0
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
--48425--   Considering /usr/lib/debug/.build-id/9a/65bb469e45a1c6fbcffae5b82a2fd7a69eb479.debug ..
--48425--   .. build-id is valid
--48425-- Reading syms from <>/opencv_build/install/lib/libopencv_calib3d.so.4.10.0
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libdl-2.31.so
--48425--   Considering /usr/lib/debug/.build-id/25/372f43dbcc661aa02020d0365c948e89f6e612.debug ..
--48425--   .. build-id is valid
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.16
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgdk-3.so.0.2404.16
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libcairo.so.2.11600.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0.4000.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libavcodec.so.58.54.100
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libavformat.so.58.29.100
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libavutil.so.56.31.100
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libswscale.so.5.5.100
--48425--    object doesn't have a symbol table
--48425-- Reading syms from <>/opencv_build/install/lib/libopencv_features2d.so.4.10.0
--48425-- Reading syms from <>/opencv_build/install/lib/libopencv_flann.so.4.10.0
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
--48425--   Considering /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 ..
--48425--   .. CRC mismatch (computed 7de9b6ad wanted e8a17129)
--48425--   Considering /lib/x86_64-linux-gnu/libXau.so.6.0.0 ..
--48425--   .. CRC mismatch (computed 7de9b6ad wanted e8a17129)
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0.6400.6
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0.4400.7
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libcairo-gobject.so.2.11600.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0.23510.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libepoxy.so.0.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libfribidi.so.0.4.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6400.6
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0.4400.7
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0.4400.7
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0.20600.4
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.12.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libfreetype.so.6.17.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXcomposite.so.1.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXdamage.so.1.1.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libxkbcommon.so.0.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.3.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0
--48425--   Considering /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 ..
--48425--   .. CRC mismatch (computed 7e27e1ef wanted 4ab025b2)
--48425--   Considering /lib/x86_64-linux-gnu/libXext.so.6.4.0 ..
--48425--   .. CRC mismatch (computed 7e27e1ef wanted 4ab025b2)
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/librt-2.31.so
--48425--   Considering /usr/lib/debug/.build-id/fc/7c873442781f08af6bc88f1acac7ecccec7285.debug ..
--48425--   .. build-id is valid
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libpixman-1.so.0.38.4
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libxcb-render.so.0.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libffi.so.7.1.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libpcre.so.3.13.3
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libswresample.so.3.5.100
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libvpx.so.6.2.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libwebpmux.so.3.0.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libwebp.so.6.0.2
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/liblzma.so.5.2.4
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/librsvg-2.so.2.47.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libzvbi.so.0.13.2
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libsnappy.so.1.1.8
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libaom.so.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libcodec2.so.0.9
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgsm.so.1.0.18
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libmp3lame.so.0.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libopenjp2.so.2.3.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libopus.so.0.8.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libshine.so.3.0.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libspeex.so.1.5.0
--48425--   Considering /usr/lib/x86_64-linux-gnu/libspeex.so.1.5.0 ..
--48425--   .. CRC mismatch (computed cdeef767 wanted e46c0181)
--48425--   Considering /lib/x86_64-linux-gnu/libspeex.so.1.5.0 ..
--48425--   .. CRC mismatch (computed cdeef767 wanted e46c0181)
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libtheoraenc.so.1.1.2
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libtheoradec.so.1.1.4
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libtwolame.so.0.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libvorbis.so.0.4.8
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.11
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libwavpack.so.1.2.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libx264.so.155
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libx265.so.179
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libxvidcore.so.4.3
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libva.so.2.700.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.10
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libbz2.so.1.0.4
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgme.so.0.6.2
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libopenmpt.so.0.1.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libchromaprint.so.1.4.3
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libbluray.so.2.2.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libssh-gcrypt.so.4.8.4
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libva-drm.so.2.700.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libva-x11.so.2.700.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libvdpau.so.1.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libbsd.so.0.10.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.11
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libatspi.so.0.0.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libmount.so.1.1.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libselinux.so.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libresolv-2.31.so
--48425--   Considering /usr/lib/debug/.build-id/08/f526f3424a323f041d27d040659e7fd07a8be5.debug ..
--48425--   .. build-id is valid
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libthai.so.0.3.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgraphite2.so.3.2.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libexpat.so.1.6.11
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libsoxr.so.0.1.2
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libogg.so.0.8.4
--48425--   Considering /usr/lib/x86_64-linux-gnu/libogg.so.0.8.4 ..
--48425--   .. CRC mismatch (computed 9cb68f90 wanted f1b31916)
--48425--   Considering /lib/x86_64-linux-gnu/libogg.so.0.8.4 ..
--48425--   .. CRC mismatch (computed 9cb68f90 wanted f1b31916)
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libnuma.so.1.0.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libicuuc.so.66.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libmpg123.so.0.44.10
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libvorbisfile.so.3.3.7
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.6
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libunistring.so.2.1.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libnettle.so.7.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libhogweed.so.5.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.2.5
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.28.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libsystemd.so.0.28.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libblkid.so.1.1.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libdatrie.so.1.3.5
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libicudata.so.66.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libcom_err.so.2.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.2
--48425--    object doesn't have a symbol table
--48425-- Reading syms from /usr/lib/x86_64-linux-gnu/libkeyutils.so.1.8
--48425--    object doesn't have a symbol table
--48425-- REDIR: 0x5e40480 (libc.so.6:memmove) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f780 (libc.so.6:strncpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e407b0 (libc.so.6:strcasecmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f0a0 (libc.so.6:strcat) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f7e0 (libc.so.6:rindex) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e41c50 (libc.so.6:rawmemchr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e5cce0 (libc.so.6:wmemchr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e5c820 (libc.so.6:wcscmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e405e0 (libc.so.6:mempcpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e40410 (libc.so.6:bcmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f710 (libc.so.6:strncmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f150 (libc.so.6:strcmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e40540 (libc.so.6:memset) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e5c7e0 (libc.so.6:wcschr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f670 (libc.so.6:strnlen) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f230 (libc.so.6:strcspn) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e40800 (libc.so.6:strncasecmp) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f1d0 (libc.so.6:strcpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e40950 (libc.so.6:memcpy@@GLIBC_2.14) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e5df50 (libc.so.6:wcsnlen) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e5c860 (libc.so.6:wcscpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f820 (libc.so.6:strpbrk) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f100 (libc.so.6:index) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f630 (libc.so.6:strlen) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e48bb0 (libc.so.6:memrchr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e40850 (libc.so.6:strcasecmp_l) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e403d0 (libc.so.6:memchr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e5c930 (libc.so.6:wcslen) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3fae0 (libc.so.6:strspn) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e40750 (libc.so.6:stpncpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e406f0 (libc.so.6:stpcpy) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e41c90 (libc.so.6:strchrnul) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e408a0 (libc.so.6:strncasecmp_l) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5ecda70 (libc.so.6:__memcpy_chk) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e402f0 (libc.so.6:strstr) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5e3f6b0 (libc.so.6:strncat) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
--48425-- REDIR: 0x5ecdb30 (libc.so.6:__memmove_chk) redirected to 0x48331d0 (_vgnU_ifunc_wrapper)
==48425== WARNING: new redirection conflicts with existing -- ignoring it
--48425--     old: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2030.0) 0x04843b10 __memcpy_chk
--48425--     new: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2024.0) 0x048434d0 __memmove_chk
==48425== WARNING: new redirection conflicts with existing -- ignoring it
--48425--     old: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2030.0) 0x04843b10 __memcpy_chk
--48425--     new: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2024.0) 0x048434d0 __memmove_chk
==48425== WARNING: new redirection conflicts with existing -- ignoring it
--48425--     old: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2030.0) 0x04843b10 __memcpy_chk
--48425--     new: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2024.0) 0x048434d0 __memmove_chk
==48425== WARNING: new redirection conflicts with existing -- ignoring it
--48425--     old: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2030.0) 0x04843b10 __memcpy_chk
--48425--     new: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2024.0) 0x048434d0 __memmove_chk
==48425== WARNING: new redirection conflicts with existing -- ignoring it
--48425--     old: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2030.0) 0x04843b10 __memcpy_chk
--48425--     new: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2024.0) 0x048434d0 __memmove_chk
==48425== WARNING: new redirection conflicts with existing -- ignoring it
--48425--     old: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2030.0) 0x04843b10 __memcpy_chk
--48425--     new: 0x05f2b900 (__memcpy_chk_avx_una) R-> (2024.0) 0x048434d0 __memmove_chk
--48425-- REDIR: 0x5f28730 (libc.so.6:__strrchr_avx2) redirected to 0x483ea10 (rindex)
--48425-- REDIR: 0x5f28900 (libc.so.6:__strlen_avx2) redirected to 0x483ef40 (strlen)
--48425-- REDIR: 0x5e3a0e0 (libc.so.6:malloc) redirected to 0x483b780 (malloc)
--48425-- REDIR: 0x5f2b910 (libc.so.6:__memcpy_avx_unaligned_erms) redirected to 0x48429f0 (memmove)
--48425-- REDIR: 0x5f23df0 (libc.so.6:__strcmp_avx2) redirected to 0x483fed0 (strcmp)
--48425-- REDIR: 0x5f24230 (libc.so.6:__strncmp_avx2) redirected to 0x483f670 (strncmp)
--48425-- REDIR: 0x5f28310 (libc.so.6:__strchr_avx2) redirected to 0x483ebf0 (index)
--48425-- REDIR: 0x5e3ffa0 (libc.so.6:__GI_strstr) redirected to 0x4843ca0 (__strstr_sse2)
--48425-- REDIR: 0x5f24760 (libc.so.6:__memchr_avx2) redirected to 0x4840050 (memchr)
--48425-- REDIR: 0x5e3ae80 (libc.so.6:realloc) redirected to 0x483df30 (realloc)
--48425-- REDIR: 0x5e3a6d0 (libc.so.6:free) redirected to 0x483c9d0 (free)
--48425-- REDIR: 0x5e3bb10 (libc.so.6:calloc) redirected to 0x483dce0 (calloc)
--48425-- REDIR: 0x5f28540 (libc.so.6:__strchrnul_avx2) redirected to 0x4843540 (strchrnul)
--48425-- REDIR: 0x5f2b8f0 (libc.so.6:__mempcpy_avx_unaligned_erms) redirected to 0x4843660 (mempcpy)
--48425-- REDIR: 0x5e40fc0 (libc.so.6:strcasestr) redirected to 0x4843f80 (strcasestr)
--48425-- REDIR: 0x5e5b3f0 (libc.so.6:__strstr_sse2_unaligned) redirected to 0x4843c20 (strstr)
--48425-- REDIR: 0x5f2bd90 (libc.so.6:__memset_avx2_unaligned_erms) redirected to 0x48428e0 (memset)
--48425-- REDIR: 0x5f28dc0 (libc.so.6:__strcat_avx2) redirected to 0x483ec20 (strcat)
--48425-- REDIR: 0x5f2b900 (libc.so.6:__memcpy_chk_avx_unaligned_erms) redirected to 0x4843b10 (__memcpy_chk)
--48425-- REDIR: 0x5f24ef0 (libc.so.6:__memcmp_avx2_movbe) redirected to 0x48421e0 (bcmp)
--48425-- REDIR: 0x5afeb10 (libstdc++.so.6:operator new(unsigned long)) redirected to 0x483bdf0 (operator new(unsigned long))
--48425-- REDIR: 0x5afcd60 (libstdc++.so.6:operator delete(void*)) redirected to 0x483cf50 (operator delete(void*))
--48425-- REDIR: 0x5afeb70 (libstdc++.so.6:operator new[](unsigned long)) redirected to 0x483c510 (operator new[](unsigned long))
--48425-- REDIR: 0x5afcd90 (libstdc++.so.6:operator delete[](void*)) redirected to 0x483d6e0 (operator delete[](void*))
--48425-- REDIR: 0x5ecde20 (libc.so.6:__strcpy_chk) redirected to 0x48435c0 (__strcpy_chk)
--48425-- REDIR: 0x5f2a1d0 (libc.so.6:__strncpy_avx2) redirected to 0x483f230 (strncpy)
--48425-- REDIR: 0x5f2ab30 (libc.so.6:__stpcpy_avx2) redirected to 0x4842300 (stpcpy)
==48425== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==48425== 
==48425== Process terminating with default action of signal 11 (SIGSEGV)
==48425==  Access not within mapped region at address 0x1FFE801FF8
==48425== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==48425==    at 0x49BB7A1: vpCannyEdgeDetection::recursiveSearchForStrongEdge(std::pair<unsigned int, unsigned int> const&) (vpCannyEdgeDetection.cpp:554)
==48425==  If you believe this happened as a result of a stack
==48425==  overflow in your program's main thread (unlikely but
==48425==  possible), you can try to increase the size of the
==48425==  main thread stack using the --main-stacksize= flag.
==48425==  The main thread stack size used in this run was 8388608.
==48425== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==48425== 
==48425== Process terminating with default action of signal 11 (SIGSEGV)
==48425==  Access not within mapped region at address 0x1FFE801FF0
==48425== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==48425==    at 0x4833134: _vgnU_freeres (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_core-amd64-linux.so)
==48425==  If you believe this happened as a result of a stack
==48425==  overflow in your program's main thread (unlikely but
==48425==  possible), you can try to increase the size of the
==48425==  main thread stack using the --main-stacksize= flag.
==48425==  The main thread stack size used in this run was 8388608.
==48425== 
==48425== HEAP SUMMARY:
==48425==     in use at exit: 112,928,022 bytes in 1,285,650 blocks
==48425==   total heap usage: 1,314,248 allocs, 28,598 frees, 166,150,293 bytes allocated
==48425== 
==48425== Searching for pointers to 1,285,650 not-freed blocks
==48425== Checked 121,234,872 bytes
==48425== 
==48425== 16 bytes in 1 blocks are possibly lost in loss record 121 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26DDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0D6: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E05EDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0B7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425== 
==48425== 16 bytes in 1 blocks are possibly lost in loss record 122 of 479
==48425==    at 0x483B723: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x483E017: realloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7F3F: g_realloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26D57: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0D6: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E05EDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0B7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== 16 bytes in 1 blocks are possibly lost in loss record 123 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26DDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0D6: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E05F41: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0B7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425== 
==48425== 16 bytes in 1 blocks are possibly lost in loss record 124 of 479
==48425==    at 0x483B723: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x483E017: realloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7F3F: g_realloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26D57: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0D6: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E05F41: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0B7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== 16 bytes in 1 blocks are possibly lost in loss record 125 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26DDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0D6: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E0FFFF: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0C1: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425== 
==48425== 16 bytes in 1 blocks are possibly lost in loss record 126 of 479
==48425==    at 0x483B723: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x483E017: realloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7F3F: g_realloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26D57: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0D6: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E0FFFF: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0C1: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== 16 bytes in 1 blocks are possibly lost in loss record 127 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26DDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0D6: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E0ACC3: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0C6: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425== 
==48425== 16 bytes in 1 blocks are possibly lost in loss record 128 of 479
==48425==    at 0x483B723: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x483E017: realloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7F3F: g_realloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26D57: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0D6: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E0ACC3: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0C6: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== 96 bytes in 1 blocks are possibly lost in loss record 328 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E260E7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2628A: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFEFDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425==    by 0x1FFF00016A: ???
==48425== 
==48425== 96 bytes in 1 blocks are possibly lost in loss record 329 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E260E7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2628A: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0C8: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E05EDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0B7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== 96 bytes in 1 blocks are possibly lost in loss record 330 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E260E7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2628A: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0C8: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E05F41: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0B7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== 96 bytes in 1 blocks are possibly lost in loss record 331 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E260E7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2628A: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0C8: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E0FFFF: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0C1: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== 96 bytes in 1 blocks are possibly lost in loss record 332 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E260E7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2628A: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A0C8: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E0ACC3: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0C6: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== 132 bytes in 1 blocks are possibly lost in loss record 360 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E270F4: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A159: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E05EDE: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0B7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425== 
==48425== 132 bytes in 1 blocks are possibly lost in loss record 361 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E270F4: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A159: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E05F41: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0B7: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425== 
==48425== 148 bytes in 1 blocks are possibly lost in loss record 376 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26F08: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A159: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E0FFFF: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0C1: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425== 
==48425== 148 bytes in 1 blocks are possibly lost in loss record 377 of 479
==48425==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7EF0: g_malloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26F08: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A159: g_type_register_fundamental (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E0ACC3: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0C6: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425==    by 0x1FFF000167: ???
==48425== 
==48425== 184 bytes in 1 blocks are possibly lost in loss record 397 of 479
==48425==    at 0x483DFAF: realloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==48425==    by 0x8EA7F3F: g_realloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6400.6)
==48425==    by 0x8E26063: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E2A324: g_type_register_static (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E11D12: g_param_type_register_static (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8E147EA: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x8DFF0CB: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.6400.6)
==48425==    by 0x4011B99: call_init.part.0 (dl-init.c:72)
==48425==    by 0x4011CA0: call_init (dl-init.c:30)
==48425==    by 0x4011CA0: _dl_init (dl-init.c:119)
==48425==    by 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
==48425==    by 0xA: ???
==48425==    by 0x1FFF000156: ???
==48425== 
==48425== LEAK SUMMARY:
==48425==    definitely lost: 0 bytes in 0 blocks
==48425==    indirectly lost: 0 bytes in 0 blocks
==48425==      possibly lost: 1,352 bytes in 18 blocks
==48425==    still reachable: 112,926,670 bytes in 1,285,632 blocks
==48425==                       of which reachable via heuristic:
==48425==                         newarray           : 1,536 bytes in 16 blocks
==48425==         suppressed: 0 bytes in 0 blocks
==48425== Reachable blocks (those to which a pointer was found) are not shown.
==48425== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==48425== 
==48425== ERROR SUMMARY: 18 errors from 18 contexts (suppressed: 0 from 0)

s-trinh added a commit to s-trinh/visp that referenced this issue Oct 29, 2024
s-trinh added a commit to s-trinh/visp that referenced this issue Oct 29, 2024
@rolalaro
Copy link

rolalaro commented Oct 29, 2024

I suspect that the high threshold is too high, leading to all the edges being considered as weak edges. Due to that, the vpCannyEdgeDetection::recursiveSearchForStrongEdge could be called until the stack of calls is too high to be handled. Could you please replace the code of this method by the following, compile and give me the result of the print please ? Basically, instead of calling vpCannyEdgeDetection::recursiveSearchForStrongEdge, the method vpCannyEdgeDetection::performEdgeTracking will count the number of weak and strong edges.

void
vpCannyEdgeDetection::performEdgeTracking()
{
  std::map<std::pair<unsigned int, unsigned int>, EdgeType>::iterator it;
  std::map<std::pair<unsigned int, unsigned int>, EdgeType>::iterator m_edgePointsCandidates_end = m_edgePointsCandidates.end();
  unsigned int nbStrongEdges = 0, nbWeakEdges = 0;
  for (it = m_edgePointsCandidates.begin(); it != m_edgePointsCandidates_end; ++it) {
    if (it->second == STRONG_EDGE) {
      m_edgeMap[it->first.first][it->first.second] = 255;
      if (m_storeListEdgePoints) {
        m_edgePointsList.push_back(vpImagePoint(it->first.first, it->first.second));
      }
      ++nbStrongEdges;
    }
    else if (it->second == WEAK_EDGE) {
      // if (recursiveSearchForStrongEdge(it->first)) {
      m_edgeMap[it->first.first][it->first.second] = 255;
    // }
      ++nbWeakEdges;
    }
  }
  std::cout << "[vpCannyEdgeDetection::performEdgeTracking]#strong edges = " << nbStrongEdges << std::endl;
  std::cout << "[vpCannyEdgeDetection::performEdgeTracking]#weak edges = " << nbWeakEdges << std::endl;
}

@s-trinh
Copy link
Contributor Author

s-trinh commented Oct 29, 2024

The output:

I_gray=1788x942
[vpCannyEdgeDetection::performEdgeTracking]#strong edges = 102138
[vpCannyEdgeDetection::performEdgeTracking]#weak edges = 539881

@rolalaro
Copy link

rolalaro commented Oct 30, 2024

OK not what I expected to be honnest, I was expected something like 0 strong edges and a lot of weak edges.
What's weird is that I cannot reproduce it, the Mac OS CIs worked but the Ubuntu 22.04 CIs failed.

The differences between our configurations:

  • Ubuntu versions: your computer is on 20.04 whereas my computer and the Linux CIs is on Ubuntu 22.04
  • c++ compiler versions: you have c++ 9.4 while I have c++ 11.4
  • Blas/Lapack: you use Lapack built-in while I use Atlas
  • Eigen versions: you have 3.3.7 while I have 3.4.0

By any chance do you have Docker ? If so, could you create an image based on Ubuntu 22.04 with the same c++ compiler version than I have to see if it changes anything ? It might not, because it seems that the OS release is different between the Docker images and the one that is installed on my computer.

Other question: have you ever faced this segfault with other images ? Such as a with an image with a gray empty square inside ? (it can be generated using vpImageDraw)

@rolalaro
Copy link

rolalaro commented Oct 30, 2024

After a second thought, I will create a Docker that reproduces your configuration, try to reproduce the bug and come back to you if that's fine with you ?

@rolalaro
Copy link

OK I downloaded the image you posted (before I did a screenshot because I didn't find how to save it) and now I have a segfault on my computer too. So it's not due to a different configuration, there is a segfault happening somewhere. I'll continue to dig in.

@rolalaro
Copy link

rolalaro commented Oct 30, 2024

Found the problem !
My original thought was correct, the problem came from the upper threshold ratio you used. It must be between 0 and 1, because it corresponds to the ratio of points that must have the norm of their gradient lower than the found threshold. In other words, if you set the upper ratio to 0.5, it means that at least 50% of the pixels will have a gradient lower than the found threshold.

See #1490 for the fix.

@s-trinh
Copy link
Contributor Author

s-trinh commented Oct 30, 2024

Thanks for your quick feedback.
I also have to refresh the webpage sometimes in order to open the image in another tab on Github.


It looks like for certain values of Gaussian std and for some over-exposed images we are hitting somehow the limit of the stack size.

For instance when using this image or the image from the first post

2015_03449

  • ./tutorial-canny -i /tmp/2015_03449.png --gradient 3 0.5:
Canny Configuration:
	Filtering + gradient operators = gaussianblur+sobel-filtering
	Gaussian filter kernel size = 3
	Gaussian filter standard deviation = 0.500000
	Gradient filter kernel size = 3
	Canny edge filter thresholds = [-1.000000 ; -1.000000]
	Canny edge filter thresholds ratio (for auto-thresholding) = [0.600000 ; 0.800000]
  • dIx_uchar
    dIx_uchar

  • dIy_uchar
    dIy_uchar

  • without the recursiveSearchForStrongEdge() it gives:

[vpCannyEdgeDetection::performEdgeTracking]#strong edges = 77555
[vpCannyEdgeDetection::performEdgeTracking]#weak edges = 264432
  • I_canny_visp (the top and bottom white bands are I guess what makes the call to recursiveSearchForStrongEdge() hitting the stack size limit)

I_canny_visp

It works correctly with ./tutorial-canny -i /tmp/2015_03449.png --gradient 3 0.1.


Increasing the stack size make it works.

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 62389
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 62389
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ulimit -s 16384

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 62389
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 16384
cpu time               (seconds, -t) unlimited
max user processes              (-u) 62389
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

./tutorial-canny -i /tmp/2015_03449.png --gradient 3 0.5
Canny Configuration:
	Filtering + gradient operators = gaussianblur+sobel-filtering
	Gaussian filter kernel size = 3
	Gaussian filter standard deviation = 0.500000
	Gradient filter kernel size = 3
	Canny edge filter thresholds = [-1.000000 ; -1.000000]
	Canny edge filter thresholds ratio (for auto-thresholding) = [0.600000 ; 0.800000]

And the result image:

I_canny_visp

@fspindle
Copy link
Contributor

This issue seems definitively due to the recursive algorithm. I remember that in vpDot that implements also a recursive algorithm, we had also issues with the size of the stack.

The fix that I found on that time was to add in vpDot.cpp.

#ifdef VISP_USE_MSVC
#pragma comment(linker, "/STACK:256000000") // Increase max recursion depth
#endif

Similar code could be tested to see if it helps.

@rolalaro
Copy link

@s-trinh oh indeed the results largely differ depending on the gradient standard deviation ! My bad, I tested the algorithm on some images coming from a dataset known for testing Canny implementations, but I didn't think to try it on overexposed images.
I will try the solution proposed by @fspindle and let you know the results.

@rolalaro
Copy link

rolalaro commented Nov 5, 2024

@s-trinh the following proposition has been retained and is implemented in #1490 :

  • for Windows, the stack size is increased at compilation time, because as far as I know it cannot be increase at runtime
  • for POSIX systems, the user can change the required stack size using the method setMinimumStackSize . At runtime, we check if the stack size is at least as big as the minimum required stack size. If not, the stack size is increased until the end of the call to the detect method.

Can you tell us if this solution answers your needs, to know if we can close this issue ?

@s-trinh
Copy link
Contributor Author

s-trinh commented Nov 5, 2024

@rolalaro

Yes, the issue is solved now. Thanks.

@fspindle fspindle added the bug label Nov 6, 2024
@fspindle
Copy link
Contributor

fspindle commented Nov 6, 2024

Fixed in #1490

@fspindle fspindle closed this as completed Nov 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants