OpenCV和OpenEXR问题记录

在调用OpenCV做棋盘格角点检测时,会出现一些链接问题,记录如下:
如果用了cv::imread,必须链接opencv_imagecodes库,不然报以下错误

undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'

使用cv::findChessboardCorners、cv::cornerSubPix、以及cv::solvePnP必须链接 opencv_calib3d,不然报错如下:

libopencv_imgcodecs.so: undefined reference to `Imf_2_2::FrameBuffer::end()'
libopencv_imgcodecs.so: undefined reference to `Imf_2_2::InputFile::readPixels(int, int)'
 undefined reference to `Imf_2_2::ChannelList::insert(char const*, Imf_2_2::Channel const&)'
 ...

需要链接opencv_calib3d

注意opencv_imagecodes依赖OpenEXR
如果版本不对会出错,Imf_2_2 表明需要2.2.0的版本,现提供安装方法如下
下载

git clone -b v2.2.0 https://github.com/AcademySoftwareFoundation/openexr.git
或
https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.2.0.zip
cd openexr-2.2.0/IlmBase/
mkdir build && cd build
cmake .. #可以指定第三方文件夹cmake .. -DCMAKE_INSTALL_PREFIX=~/project/third_dir/openexr/
make
sudo make install

cd openexr-2.2.0/OpenEXR
mkdir build && cd build

#记得修改CMakeLists.txt 不然会找不到half.h
#INCLUDE_DIRECTORIES(/home/project/third_dir/openexr/include/OpenEXR)
#link_directories(/home/project/third_dir/openexr/lib)

cmake .. #可以指定第三方文件夹cmake .. -DCMAKE_INSTALL_PREFIX=~/project/third_dir/openexr/
make
sudo make install

如果在编译时还是找不到链接,
错误提示是 ./dwaLookups: error while loading shared libraries: libIex-2_2.so.12: cannot open shared object file: No such file or directory。
记得使用以下命令查看是否生成链接

sudo find / -name "libIex-2_2.so.12"

如果能够找到

export LD_LIBRARY_PATH=/home/project/third_dir/openexr/lib/:$LD_LIBRARY_PATH

此时OpenEXR就安装成功了,如果安装文件夹是第三方,记得在自己项目CMakeLIst.txt里指定位置

include_directories(
    /home/project/third_dir/openexr/include
)

link_directories(
    /home/project/third_dir/openexr/lib
)

编译项目如果出现以下错误:
symbol lookup error: /home/third_party/opencv/lib/libopencv_imgcodecs.so.4.5: undefined symbol: ZN7Imf_2_214ChromaticitiesC1ERKN9Imath_2_24Vec2IfEES5_S5_S5
说明OpenCV 和 OpenEXR 库的版本不匹配,可能导致符号找不到,记得链接到自己的安装文件夹

 export LD_LIBRARY_PATH=/home/project/third_dir/openexr/lib/:$LD_LIBRARY_PATH

对于openexr2.3.0及以上版本,安装方法如下

    cd <source root>/IlmBase
    ./bootstrap
    ./configure --prefix=/mnt/Data/code/thirdparty/openexr
    make
    make install

    cd <source root>/OpenExr
    ./bootstrap
    ./configure --prefix=/mnt/Data/code/thirdparty/openexr
    make
    make install
    ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值