tb-rk3588编译opencv时怎么通过opencl调用mali
时间: 2023-11-09 18:20:39 浏览: 266
在 tb-rk3588 上编译 OpenCV 时,可以使用 OpenCL 接口来调用 Mali GPU。
以下是在 tb-rk3588 上编译 OpenCV 并使用 OpenCL 接口调用 Mali GPU 的基本步骤:
1. 确保已经安装了 Mali GPU 驱动和 Mali GPU 库。可以通过 `ls /usr/lib/aarch64-linux-gnu/libMali.so` 命令检查是否已经安装了 Mali GPU 库。
2. 下载 OpenCV 源代码,并在下载的源代码目录中创建一个新目录 `build`。
3. 进入 `build` 目录,运行以下命令配置编译选项:
```
cmake -DWITH_OPENCL=ON -DWITH_OPENMP=OFF -DWITH_TBB=OFF -DWITH_IPP=OFF -DWITH_LAPACK=OFF -DWITH_EIGEN=OFF -DWITH_CUDA=OFF -DWITH_PROTOBUF=OFF -DWITH_GTK=OFF -DWITH_QT=OFF -DWITH_VTK=OFF -DWITH_GDAL=OFF -DWITH_XINE=OFF -DWITH_AVFOUNDATION=OFF -DWITH_OPENEXR=OFF -DWITH_WEBP=OFF -DWITH_JASPER=OFF -DWITH_JPEG=ON -DWITH_PNG=ON -DWITH_TIFF=ON -DWITH_ZLIB=ON -DWITH_FFMPEG=ON -DWITH_GSTREAMER=OFF ..
```
4. 运行以下命令编译 OpenCV:
```
make -j4
```
5. 在 OpenCV 中启用 OpenCL。在代码中添加以下代码:
```
cv::ocl::setUseOpenCL(true);
```
6. 在代码中使用 OpenCL 接口调用 Mali GPU。例如:
```
cv::UMat src, dst;
cv::Mat src_host = cv::imread("input.jpg", cv::IMREAD_COLOR);
src_host.copyTo(src);
cv::ocl::oclMat ocl_src(src), ocl_dst;
cv::ocl::Kernel kernel("my_kernel", cv::ocl::imgproc::ocl::cvtColor_oclsrc, cv::ocl::imgproc::ocl::cvtColor_oclsrc_len);
kernel.args(cv::ocl::KernelArg::ReadOnlyNoSize(src), cv::ocl::KernelArg::WriteOnly(dst));
size_t globalThreads[3] = { src.cols, src.rows, 1 };
size_t localThreads[3] = { 16, 16, 1 };
cv::ocl::enqueueKernel(kernel, 2, globalThreads, localThreads);
ocl_dst.download(dst);
cv::Mat dst_host(dst);
cv::imwrite("output.jpg", dst_host);
```
这样,就可以在 tb-rk3588 上编译并使用 OpenCL 接口调用 Mali GPU 的 OpenCV。
阅读全文