# 接口

OpenCV 是一个多功能的[开源软件库](http://opencv.org)，它用数以百计的计算机视觉算法提供了广泛的功能，使开发人员能够跨领域创建复杂的计算机视觉应用程序。凭借这一广泛优化的算法集合，OpenCV 经常被计算机视觉开发者使用。

在图片、视频之类的图像上应用滤镜、特征提取、图像分割、模式识别、机器学习和深度学习等操作，使用 [OpenCV](https://docs.opencv.org/4.x/d9/df8/tutorial_root.html) 帮助计算机实现视觉功能，包括目标检测与跟踪、场景与图像理解与分类、人脸检测与识别以及手势识别。

备注

在运行 SSH 命令之前，请确保按照 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/)的[如何使用 SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/how_to.html#how-to-ssh-) 章节中的步骤，在 Permissive 模式下启用 SSH

## 编译 OpenCV 4.5.5 并将其合并到您的框架中 

1. 使用 Yocto 工作流程同步并编译最新的 Qualcomm Linux 软件发行版本，具体内容参见 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/) (80-70014-254)。
2. 按照 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/) (80-70014-254) 中的描述，烧写最新的 Qualcomm Linux 软件发行版本。
3. 要启用**测试**包，在 `<workspace>/layers/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.5.5.bb` recipe 文件的 `PACKAGECONFIG` 中添加 `tests`，如下所示。

PACKAGECONFIG ??= "gapi python3 eigen jpeg png tiff v4l libv4l samples tbb gphoto2 tests \
         ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk", "", d)} \
         Copy to clipboard

**库和测试程序**

默认情况下，只有编译版本中显示为测试 bin 的库会被清理。

1. 要保留测试 bin，在 `<workspace>/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.5.5.bb` recipe 文件中添加以下代码：

RM_WORK_EXCLUDE += "opencv"Copy to clipboard
2. 当版本已经被编译过了，必须在重新编译之前清理 OpenCV。要清理 OpenCV，运行以下命令：

bitbake -fc cleanall opencvCopy to clipboard

    编译期间没有代码修改，因此直接发编译命令不会生成相应的 bin。
3. 要编译 OpenCV，运行以下命令：

bitbake opencvCopy to clipboard

库的路径为 `tmp-glibc/sysroots-components/armv8-2a/opencv/usr/lib/`。

Bin 的路径为 `tmp-glibc/work/armv8-2a-qcom-linux/opencv/4.5.5-r0/build/bin/`。

## 测试

调用 OpenCV API 的示例程序可以参考原生 OpenCV 测试示例。使用以下步骤调用 Snapdragon 设备上的应用程序。

完整地编译镜像以确保所有库都是应用程序镜像的一部分。

1. 按照 [Qualcomm Linux 编译指南](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/) (80-70014-254) 的描述在设备上烧写镜像。

    OpenCV 库位于设备上的 `/usr/lib`。
2. 对于测试数据，请使用 Git clone 位于 [https://github.com/opencv/opencv_extra/tree/4.5.5](https://github.com/opencv/opencv_extra/tree/4.5.5) 的项目。
3. 为了避免在尝试将测试数据和二进制文件推送到设备时出现只读错误，使用设备的 IP 地址登录 SSH 终端，并运行以下命令重新挂载设备。

mount -o remount,rw /Copy to clipboard
4. 使用 `scp` 命令将测试数据推送到首选主机。

    例如： `scp -r [file] root@[IP-ADDR]:/tmp`
5. 使用 `scp` 命令将所需的测试二进制文件推送到 `/usr/bin`。

    例如： `scp -r [test] root@[IP-ADDR]:/usr/bin/`
6. 在主机上执行以下命令：

scp -r tmp-glibc/sysroots-components/armv8-2a/opencv/usr/lib/libopencv_ts.so root@[IP-ADDR]:/usr/lib/
        scp -r tmp-glibc/sysroots-components/armv8-2a/opencv/usr/lib/libopencv_ts.so.4.5.5 root@[IP-ADDR]:/usr/lib/
        scp -r tmp-glibc/sysroots-components/armv8-2a/opencv/usr/lib/libopencv_ts.so.405 root@[IP-ADDR]:/usr/lib/
        Copy to clipboard
7. 登录 SSH 终端并运行以下命令。

chmod 777 /usr/bin/<opencv_test_bin>
        cd usr/bin
        export OPENCV_LOG_LEVEL=DEBUG
        export OPENCV_VIDEOIO_DEBUG=1
        export OPENCV_TEST_DATA_PATH=/tmp
        ./<opencv_test_bin> --gtest_output=json:/tmp/results.json --gtest_also_run_disabled_tests
        exit
        Copy to clipboard

    结果存储在 `/tmp/results.json`。要更改结果文件名，修改 `--gtest_output=json:/tmp/results.json` 参数。

Last Published: Aug 09, 2024

[Previous Topic
概述](https://docs.qualcomm.com/bundle/publicresource/80-70014-21Y/topics/overview.md) [Next Topic
示例程序](https://docs.qualcomm.com/bundle/publicresource/80-70014-21Y/topics/samples.md)