当 pkg-config 似乎不起作用时,如何使用 cuda 示例构建一个简单的 opencv

问题描述 投票:0回答:1

我正在使用带有 Opencv 构建的 docker 容器,并从 here 获得 CUDA 支持 我使用的 dockerfile(在基础上稍作修改)是这个

现在我尝试用一个简单的例子来检查它

#include <iostream>
#include "opencv2/opencv.hpp"
   ​
​
int main (int argc, char* argv[])
{
    //Read Two Images 
    cv::Mat h_img1 = cv::imread("images/cameraman.tif");
    cv::Mat h_img2 = cv::imread("images/circles.png");
    //Create Memory for storing Images on device
    cv::cuda::GpuMat d_result1,d_img1, d_img2;
    cv::Mat h_result1;
    //Upload Images to device     
    d_img1.upload(h_img1);
    d_img2.upload(h_img2);
​
    cv::cuda::add(d_img1,d_img2, d_result1);
    //Download Result back to host
    d_result1.download(h_result1);
    cv::imshow("Image1 ", h_img1);
    cv::imshow("Image2 ", h_img2);
    cv::imshow("Result addition ", h_result1);
    cv::imwrite("images/result_add.png", h_result1);
    cv::waitKey();
    return 0;
}

不幸的是,当您搜索“使用 cuda 构建示例 opencv”时,结果是如何“使用 cuda 构建 opencv”,而不是如何构建示例。所以我尝试用

构建示例
 g++ -std=c++11 -o image_addition one.cpp `pkg-config --cflags --libs opencv`

不幸的是这不起作用

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
one.cpp:2:10: fatal error: opencv2/opencv.hpp: No such file or directory
    2 | #include "opencv2/opencv.hpp"
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.

如何构建这个示例来检查 opencv 的使用情况?

编辑1:

我使用的dockerfile是

FROM nvidia/cuda:11.4.3-devel-ubuntu20.04

ARG DEBIAN_FRONTEND=noninteractive
ARG OPENCV_VERSION=4.5.3

RUN apt-get update && apt-get upgrade -y &&\
    # Install build tools, build dependencies and python
    apt-get install -y \
    python3-pip \
        build-essential \
        cmake \
        git \
        wget \
        unzip \
        yasm \
        pkg-config \
        libswscale-dev \
        libtbb2 \
        libtbb-dev \
        libjpeg-dev \
        libpng-dev \
        libtiff-dev \
        libavformat-dev \
        libpq-dev \
        libxine2-dev \
        libglew-dev \
        libtiff5-dev \
        zlib1g-dev \
        libjpeg-dev \
        libavcodec-dev \
        libavformat-dev \
        libavutil-dev \
        libpostproc-dev \
        libswscale-dev \
        libeigen3-dev \
        libtbb-dev \
        libgtk2.0-dev \
        pkg-config \
        ## Python
        python3-dev \
        python3-numpy \
    && rm -rf /var/lib/apt/lists/*

RUN cd /opt/ &&\
    # Download and unzip OpenCV and opencv_contrib and delte zip files
    wget https://github.com/opencv/opencv/archive/$OPENCV_VERSION.zip &&\
    unzip $OPENCV_VERSION.zip &&\
    rm $OPENCV_VERSION.zip &&\
    wget https://github.com/opencv/opencv_contrib/archive/$OPENCV_VERSION.zip &&\
    unzip ${OPENCV_VERSION}.zip &&\
    rm ${OPENCV_VERSION}.zip &&\
    # Create build folder and switch to it
    mkdir /opt/opencv-${OPENCV_VERSION}/build && cd /opt/opencv-${OPENCV_VERSION}/build &&\
    # Cmake configure
    cmake \
        -DOPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-${OPENCV_VERSION}/modules \
        -DWITH_CUDA=ON \
        -DCUDA_ARCH_BIN=7.5,8.0,8.6 \
        -DCMAKE_BUILD_TYPE=RELEASE \
        # Install path will be /usr/local/lib (lib is implicit)
        -DCMAKE_INSTALL_PREFIX=/usr/local \
        .. &&\
    # Make
    make -j"$(nproc)" && \
    # Install to /usr/local/lib
    make install && \
    ldconfig &&\
    # Remove OpenCV sources and build folder
    rm -rf /opt/opencv-${OPENCV_VERSION} && rm -rf /opt/opencv_contrib-${OPENCV_VERSION}

构建类型似乎已发布。

c++ docker opencv pkg-config
1个回答
0
投票

这不起作用的原因是

pkg-config
没有找到
opencv
的任何信息。

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable

除非有充分的理由不这样做,否则为什么不使用

apt-get
安装 OpenCV?

🗎

Dockerfile

FROM nvidia/cuda:12.3.1-devel-ubuntu22.04

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get upgrade -y &&\
    apt-get install -y \
        build-essential \
        pkg-config \
        libswscale-dev \
        libpq-dev \
        libxine2-dev \
        libglew-dev \
        zlib1g-dev \
        libpostproc-dev \
        libswscale-dev \
        libeigen3-dev \
        libtbb-dev \
        libgtk2.0-dev \
        python3-pip \
        python3-dev \
        python3-numpy \
        # Install OpenCV here!
        libopencv-dev \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

您正在安装的某些软件包可能不是必需的。我已经删掉了一些。

构建并运行容器。使用卷挂载来确保

one.cpp
与容器共享。

docker build -t opencv-one . && docker run --rm -v $(pwd):/app -it opencv-one

编译。

g++ -std=c++11 -o image_addition one.cpp `pkg-config --cflags --libs opencv4`

🚨 将

opencv4
pkg-config
一起使用,而不是
opencv

© www.soinside.com 2019 - 2024. All rights reserved.