Nvidia Jetson自带C++版本的OpenCV使用

文章介绍了在JetsonNX上安装jtop后查看Jetpack版本,系统预装OpenCV4.1.1。当pkg-config找不到opencv但可以找到opencv4时,提供了两种编译OpenCV代码的方法:命令行使用g++和gcc,以及使用CMakeLists.txt进行编译。编译时需链接libstdc++。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里以Jetson NX为例子,在安装了jtop之后,我们打开jtop,在按6,可以看到jetpack的一些信息。
在这里插入图片描述
上面显示系统是Jetpack 4.4版本的。OpenCV是刷机的时候预装的4.1.1版本【当然也可以自己卸载之后手动安装其他版本】。这里为了方便,我选择直接使用系统自带的OpenCV。

pkg-config --modversion opencv

命令显示找不到opencv,但是我们可以找到opencv4

pkg-config --modversion opencv4

在这里插入图片描述
以一段opencv代码为例子

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;
int main(int argc, char **argv)
{

	for(int i=1; i< argc; i++)
	{
		printf("argument %d is %s \n",i,argv[i]);
		//打印命令的参数
	}
	Mat img = imread("girl3.jpg");
	printf("img height %d, img width %d \n",img.rows, img.cols);
	Mat dst;
	resize(img, dst, Size(img.size().width / 2, img.size[0] / 2));
        imwrite("resize.jpg", dst);

	return 0;
}
备注:img.rows; img.size[0]; img.size().height 都是图像高度的表达方法

编译有两种方法

第一种,用命令行编译

g++会自动链接libstdc.so.6++

g++ -o Main demo.cc `pkg-config opencv4 --libs --cflags`

注意gcc命令在链接时默认使用C的库,只有添加了-lstdc++选项才会使用 C++ 的库。

gcc -o Main demo.cc `pkg-config opencv4 --libs --cflags` -lstdc++

结果如下
在这里插入图片描述
第二种,用CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

find_package(OpenCV)
include_directories(OpenCV_INCLUDE_DIRS)
message(${OpenCV_INCLUDE_DIRS})
message(${OpenCV_LIBRARIES})

add_definitions("-Wall -std=c++11")
add_executable(Main_1 demo.cc)

target_link_libraries(Main_1 ${OpenCV_LIBRARIES})

编译的命令如下

mkdir build
cd build
cmake ..
make

将图片girl3.jpg复制到build文件夹下面,再运行./Main_1 xx aa就可以了。

### 部署嵌入式应用程序于NVIDIA Jetson平台 #### 准备环境 为了在Jetson平台上部署嵌入式应用,首先需要准备合适的开发环境。这涉及到下载并安装最新的JetPack软件包[^2]。该软件包不仅包含了操作系统的映像文件,还有各种必要的开发工具链,如CUDA、cuDNN和TensorRT等。 ```bash sudo apt-get update && sudo apt-get upgrade -y ``` 上述命令用于更新已有的软件列表,并升级现有的软件至最新版本,确保系统处于最佳状态以支持后续的应用部署工作。 #### 安装依赖项 对于特定类型的嵌入式应用来说,在开始之前还需要确认一些额外的依赖项已经被正确安装。比如如果要处理图像识别任务,则可能需要用到OpenCV库;如果是自然语言处理类的任务,则可能会涉及Python编程语言及其科学计算库numpy等。 ```bash pip install numpy opencv-python ``` 这段代码展示了如何利用pip来快速安装两个常用的第三方Python扩展模块——NumPy与OpenCV-Python接口版。 #### 编写或获取目标应用程序源码 一旦基础准备工作完成之后就可以着手编写自己的应用程序逻辑或者是从开源社区寻找现成可用的例子作为起点。例如`jetson-inference`就是一个很好的例子,该项目专注于提高Jetson设备上的推理速度,能够实现高效的物体检测等功能[^4]。 假设已经有了一个简单的C++程序用来展示基本的人脸追踪功能: ```cpp #include "opencv2/objdetect.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" using namespace cv; int main(int argc, char **argv){ VideoCapture cap(0); // 打开默认摄像头 while(true){ Mat frame; cap >> frame; // 获取视频帧 imshow("Face Detection",frame); if(waitKey(30)>=0) break; } return 0; } ``` 此段代码实现了打开计算机自带摄像机捕捉实时画面的功能,并将其显示在一个窗口中等待用户关闭。 #### 构建与执行 最后一步就是编译链接我们的程序并将最终可执行文件放置到适当位置以便随时调用。考虑到Jetson系列内置有ARM架构处理器的事实,因此建议采用交叉编译的方式来进行这项工作。 不过更简单的方法是在Jetson本身上面直接使用g++或其他兼容GNU标准的编译器进行本地编译: ```bash g++ face_detection.cpp -o face_detection `pkg-config --cflags --libs opencv4` ./face_detection ``` 以上指令先指定了使用的编译器(g++)以及输入输出文件名(face_detection),紧接着通过反引号包裹起来的一串参数告诉编译器去哪里找OpenCV的相关头文件(.h/.hpp)及静态库(.a)/共享对象(.so),从而顺利完成整个项目的组装过程。接着运行生成好的二进制文件即可看到效果了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值