我正在使用带有 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}
构建类型似乎已发布。
这不起作用的原因是
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
。