OpenCV linemod not cv member - opencv

I try to install a ROS indigo package jsk_recognition for chessboard detection and relative position, I have opencv-3.0.0-rc1 on Ubuntu 14.04. When I try to catkin_make the package I receive build errors, quit a lot, the full report is here, but it starts like:
[ 73%] Building CXX object
vision/jsk_recognition-master/jsk_perception/CMakeFiles/roi_to_mask_image.dir/roi_to_mask_image.cpp.o
/home/elod/catkin_ws/src/vision/jsk_recognition-master/jsk_perception/src/linemod.cpp:69:57:
error: ‘linemod’ is not a member of ‘cv’ std::vector<CvPoint>
maskFromTemplate(const std::vector<cv::linemod::Template>& templates,
^ /home/elod/catkin_ws/src/vision/jsk_recognition-master/jsk_perception/src/linemod.cpp:69:57:
error: ‘linemod’ is not a member of ‘cv’
/home/elod/catkin_ws/src/vision/jsk_recognition-master/jsk_perception/src/linemod.cpp:69:78:
error: template argument 1 is invalid std::vector<CvPoint>
maskFromTemplate(const std::vector<cv::linemod::Template>& templates,
^
/home/elod/catkin_ws/src/vision/jsk_recognition-master/jsk_perception/src/linemod.cpp:69:78:
error: template argument 2 is invalid
/home/elod/catkin_ws/src/vision/jsk_recognition-master/jsk_perception/src/linemod.cpp:69:57:
error: ‘linemod’ is not a member of ‘cv’ std::vector<CvPoint>
maskFromTemplate(const std::vector<cv::linemod::Template>& templates,
the problem seams to be with the linemod class, which in the online opencv documentation exist but in my case the compiler does not recognise it. The linemod.h header file can't be find in any opencv folder only in:
./home/elod/catkin_ws/src/vision/jsk_recognition-master/jsk_pcl_ros/include/jsk_pcl_ros/linemod.h
./opt/ros/indigo/include/jsk_pcl_ros/linemod.h
./usr/include/pcl-1.7/pcl/recognition/linemod.h
Is this module missing somhow my OpenCV installation or why cant find it in the cv namespace?
In my old Opencv 2.4.11 (uninstalled) seams to be included this module, but I migrated all my stuff to 3.0.0.
Any ideas how to solve it?
UPDATE
A very important observation is that the above mentioned pkg is for Opencv2.4 and I'm using 3.0! Some stuff was moved or removed from the new version like cvSnakeImage, which also appears in this pkg.
An other question would be: how to replace the cvSnakeImage or with what can be replaced?

Did you build from scratch (clean build directory) ?
You could try adding cv:: namespace into *.hpp
-<linemod::Match>
+<cv::linemod::Match>
And/or try adding "#include <opencv2/rgbd/linemod.hpp>" into the same file.

Related

Installing opencv + fatal error: 'opencv2/core.hpp' file not found

I have installed open cv using the official installation process given at:
https://docs.opencv.org/4.5.2/d0/db2/tutorial_macos_install.html
I am doing this on mac and it took ~3 hours for this process. After installation, the installed directory looks like this:
apple#Apples-MacBook-Air.local:~/Learning/openCV/cpp$ pwd
/Users/apple/Learning/openCV/cpp
apple#Apples-MacBook-Air.local:~/Learning/openCV/cpp$ ls
3rdparty CTestTestfile.cmake bin data
opencv_data_config.hpp setup_vars.sh
CMakeCache.txt Makefile cmake_install.cmake doc
opencv_lapack.h test-reports
CMakeDownloadLog.txt OpenCVConfig-version.cmake cmake_uninstall.cmake
include opencv_python_config.cmake tmp
CMakeFiles OpenCVConfig.cmake configured lib
opencv_python_tests.cfg unix-install
CMakeVars.txt OpenCVModules.cmake custom_hal.hpp modules
opencv_tests_config.hpp version_string.tmp
CPackConfig.cmake apps cv_cpu_config.h opencv
python_loader
CPackSourceConfig.cmake basicOp.cpp cvconfig.h opencv2
samples
Now, I am writing a very simple program to test the installation and it looks like that I need to do more things than what I have done so far.
My simple program:
#include<iostream>
#include<opencv2/core.hpp>
int main() {
std::string imagePath = samples.findFile("starry_night.jpg");
cv::Mat imageMatrix = cv::imread(imagePath);
if(imageMatrix.empty()) {
std::cout << "Matrix is empty" << std::endl;
}
}
Compiling this gives error as:
apple#Apples-MacBook-Air.local:~/Learning/openCV/programs$ g++ imageRead.cpp
imageRead.cpp:2:9: fatal error: 'opencv2/core.hpp' file not found
#include<opencv2/core.hpp>
No problem, I can probably understand that due to non-linkage of the open cv libraries.
So, I compiled with:
apple#Apples-MacBook-Air.local:~/Learning/openCV/programs$ g++ imageRead.cpp -I/Users/apple/Learning/openCV/cpp/include -L/Users/apple/Learning/openCV/cpp/lib/
imageRead.cpp:2:9: fatal error: 'opencv2/core.hpp' file not found
#include<opencv2/core.hpp>
And it still give me the same error. Basically, I passed the paths for gcc to consider for linking.
Any suggestions? I can help providing more details on it, if needed.
Did you try #include<opencv2/opencv.hpp> instead of #include<opencv2/core.hpp>?

Yocto: cmake is missing header - how to DEPEND dev-package?

I am including opencv with custom build parameters in my Yocto image. For that I have an opencv_4.1.0.bbappend recipe, in which I set custom options, specifically FFMPEG. The recipe goes something like this:
DEPENDS += "ffmpeg libpng"
EXTRA_OECMAKE_append += "-DWITH_FFMPEG=ON -DWITH_GTK=OFF" # and some other options
During configure I get cmake errors and can't seem to figure out, how to satisfy the header dependencies. The errors go like this (I assume this is the reason for do_configure to fail):
CheckIncludeFile.c:1:10: fatal error: /home/janos/dev/yocto/build/tmp/work/core2-64-poky-linux/opencv/4.1.0-r0/recipe-sysroot/usr/include/libpng/png.h: No such file or directory
1 | #include </home/janos/dev/yocto/build/tmp/work/core2-64-poky-linux/opencv/4.1.0-r0/recipe-sysroot/usr/include/libpng/png.h>
CheckIncludeFile.c:1:10: fatal error: sys/videoio.h: No such file or directory
1 | #include <sys/videoio.h>
Focusing on the missing png.h header first, I am tempted to depend libpng-dev, as I also would apt install it. But there is no package for it.
When I search oe-pkgdata-util list-pkg-files -p libpng, I can find the header in a libpng-dev package:
...
libpng-dev:
/usr/bin/libpng-config
/usr/bin/libpng16-config
/usr/include/libpng16/png.h
/usr/include/libpng16/pngconf.h
/usr/include/libpng16/pnglibconf.h
/usr/include/png.h
...
...
I can also find it in libpng-src and also ffmpeg-src package (oe-pkgdata-util find-path "*png.h" was my friend). But all of these -dev and -src packages I cannot depend on in DEPENDS.
How can I get my recipe to know those headers?
Target machine is raspberrypi4-64, on which the recipe is configuring and compiling well - it fails when I build for qemux86-64, which I use for testing. Namely, my test command is MACHINE="qemux86-64" bitbake opencv.
It doesn't really answer the question which I though was the question - but this is how the opencv recipe is easily configured:
PACKAGECONFIG = "python3 libav libv4l v4l"
Looking into the opencv 4.1.0 recipe (opencv_4.1.0.bb), I could see that FFMPEG gets enabled with the libav configurable option.
As a result of depending FFMEPG, I had to whitelist "commercial" licenses in my local.conf file:
LICENSE_FLAGS_WHITELIST = "commercial"
Looking into ./build/tmp/work/aarch64-poky-linux/opencv/4.1.0-r0/temp/log.do_configure shows that opencv is correctly configured without GUI, with v4l/v4l2:, FFMPEG, python3, etc.
And so python3 in the resulting image:
import cv2
print(cv2.getBuildInformation())

fatal error: zbar.h: No such file or directory

I downloaded the zbar library and cloned the opencv-zbar repo in my home directory. Then I ran the following command $cmake . which gave my the error
-- Could NOT find ZBAR (missing: ZBAR_LIBRARIES ZBAR_INCLUDE_DIR)
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
ZBAR_LIBRARIES
linked by target "zbar_opencv" in directory /home/surabhi/opencv-zbar
-- Configuring incomplete, errors occurred!
See also "/home/surabhi/opencv-zbar/CMakeFiles/CMakeOutput.log".
I then made two changes in my CMakeCache.txt as follows
//Path to a file.
ZBAR_INCLUDE_DIR:PATH=/usr/include/zbar
//Path to a library.
ZBAR_LIBRARIES:FILEPATH=/usr/lib/libzbar.so
because the were set to NOTFOUND.
It then gave me no errors
-- Found ZBAR: /usr/lib/libzbar.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/surabhi/opencv-zbar
But when I run make
It gives the error:
fatal error: zbar.h: No such file or directory
#include <zbar.h>
^
compilation terminated.
I don't understand why I get this error as It says Found ZBAR when I run cmake.
Thanks in advance
You need to do actually use the include dirs somewhere in your CMakeLists.txt so CMake knows that you actually want to use these include paths.
Examples:
include_directories(${ZBAR_INCLUDE_DIR})
Or the more modern, recommended way:
target_include_directories(zbar_opencv PRIVATE ${ZBAR_INCLUDE_DIR})

Can't build OpenCV 3.1 on Windows (using MinGW)

I need to build OpenCV from source, because I want to make modifications to it. So using pre-built binaries is not an option for me. I'm doing this on Windows 8. I do not have MS Visual Studio, and I don't want to use it.
Here is how I reproduce the build error:
I git clone https://github.com/opencv/opencv
I use CMake 3.7.1, press Configure, then press Generate. It seems to work (no errors). I named the output folder opencv/release.
I go to the opencv/release folder, and type mingw32-make.
Eventually, after compiling for a while, it displays the following error message:
Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/parallel.cpp.obj
modules\core\src\parallel.cpp:135:43: error: operator '&&' has no right operand
modules\core\src\parallel.cpp: In function 'void cv::parallel_for_(const cv::Range&, const cv::ParallelLoopBody&, double)':
modules\core\src\parallel.cpp:311:52: error: 'parallel_for_pthreads' was not declared in this scope parallel_for_pthreads(range, body, nstripes);
^
modules\core\src\parallel.cpp: In function 'int cv::getNumThreads()':
modules\core\src\parallel.cpp:370:50: error: 'parallel_pthreads_get_threads_num' was not declared in this scope return parallel_pthreads_get_threads_num();
^
modules\core\src\parallel.cpp: In function 'void cv::setNumThreads(int)':
modules\core\src\parallel.cpp:431:46: error: 'parallel_pthreads_set_threads_num' was not declared in this scope parallel_pthreads_set_threads_num(threads);
^
modules\core\CMakeFiles\opencv_core.dir\build.make:990: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/src/parallel.cpp.obj' failed mingw32-make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/parallel.cpp.obj] Error 1
Note: I tried to compile both with and without TPP (in the CMake config), and I get the same error message.
Also, I read the other similar questions on StackOverflow and the answers do not help.

Build OpenCV binding in Haskell for OpenCV 2.4

I tried to install cv library via cabal (cabal install cv).
But it brings me up an error:
Configuring CV-0.3.7...
Building CV-0.3.7...
Preprocessing library CV-0.3.7...
c2hs: C header contains errors:
dist/build/CV/Video.chs.h:22: (column 39) [ERROR] >>> Unknown identifier!
Cannot find a definition for `CV_CAP_PROP_WHITE_BALANCE_BLUE_U' in the header file.
cabal: Error: some packages failed to install:
CV-0.3.7 failed during the building phase. The exception was:
ExitFailure 1
I have read that it's problem is, that my install opencv is newer than the haskell-library needs it.
My opencv:
local/opencv 2.4.12.2-2
Open Source Computer Vision Library
So how can I fix this error now? Thanks for your help!

Resources