【orin】米文动力 orin 使用体验 以及实操(雷达;摄像头)_米文+orin-CSDN博客
红外型号是IR-Pilot 640 41Z1GC,通过gsml连orin
首先,这个miivii文件下缺东西,features/gmsl_camera/samples里就缺东西,缺了两个文件夹。
所以我去新机器拷了新的miivii,完整的。然后打包成miwen.tar.gz,然后解压编译的。
miwen是我建的文件夹,把miwen.tar.gz解压生成的miivii文件夹放到了miwen里
sudo make 报错看着是缺opencv
因为正常装了opencv是这样的
但是我这个目录下只有python,没有opencv相关。
之所以不用find命令,是因为机器里容器里也安装了opencv,太长了,很难排查。
然后我在home下用源码编译的opencv
## 编译opencv源码
解压opencv.zip得到opencv-4.2.0文件夹
解压opencv_contrib.zip得到opencv_contrib-4.2.0文件夹
将opencv_contrib-4.2.0移动到opencv-4.2.0文件夹内
```
cd opencv-4.2.0
mkdir build
cd build/
export http_proxy=http://127.0.0.1:7890/ # 在容器内设置代理
cmake \
-DCUDA_nppicom_LIBRARY=stdc++ \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_ENABLE_NONFREE=1 \
-DBUILD_opencv_python2=1 \
-DBUILD_opencv_python3=1 \
-DWITH_FFMPEG=1 \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-DCUDA_ARCH_BIN=8.7 \
-DCUDA_ARCH_PTX=8.7 \
-DWITH_CUDA=1 \
-DENABLE_FAST_MATH=1 \
-DCUDA_FAST_MATH=1 \
-DWITH_CUBLAS=1 \
-DOPENCV_GENERATE_PKGCONFIG=1 \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.2.0/modules \
..
make -j4 # 四线程编译
sudo make install
```
源码编译opencv的时候出错
sudo apt-get install libboost-all-dev
之后编译成功,usr/local/lib下也出现opencv的库了
opencv编译后,接着编译gmsl
还是有报错
而Makefile里默认路径(老miivii文件夹)里只有两个so
去找新miivii发现有缺的这个so
所以我直接把opt下老miivii换成新的了
然后home下的miivii和opt下的miivii都sudo make 编译一下
没报错,看样子是过了
现在继续下一步,运行demo,报错了:缺一个so
先下一个locate工具
sudo apt-get install mlocate
sudo updatedb
还挺多,那就是没摸到,环境变量的原因了
export LD_LIBRARY_PATH=/home/nvidia/opencv/opencv/opencv-4.2.0/build/lib:/usr/local/lib:$LD_LIBRARY_PATH
再次测试
./cameras_opencv_demo -s 640x512 -d /dev/video0
成功!
注意
有段警告,缺东西,但可能无伤大雅,先跳过
nvidia@wk-orin:/opt/miivii/features/gmsl_camera/bin$ ./cameras_opencv_demo -s 640x512 -d /dev/video0
attestationVerify [13] succeed.
Opening camera...
[ WARN:0] global /home/nvidia/opencv/opencv/opencv-4.2.0/modules/videoio/src/cap_gstreamer.cpp (935) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
Gtk-Message: 20:23:56.141: Failed to load module "canberra-gtk-module"
接下来把环境变量永久写进去
永久设置 LD_LIBRARY_PATH
如果需要永久设置 LD_LIBRARY_PATH
,可以在用户的 .bashrc
或 .profile
文件中添加以下行:
export LD_LIBRARY_PATH=/home/nvidia/opencv/opencv/opencv-4.2.0/build/lib:/usr/local/lib:$LD_LIBRARY_PATH
source ~/.bashrc 使其生效
搞定!
接着我要录制 ros 话题的红外图像。
我现在已经成功输出了红外图像,如何查找红外摄像头的信息呢
ls -l /dev/video*
openCV 转 ros话题发布出去
cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython - ROS Wiki
sRGB和RGB有什么区别?
-
RGB:
- RGB 是一种加色模型,代表红(Red)、绿(Green)和蓝(Blue)三种基本颜色。在显示技术中,通过调整这三种颜色的不同强度可以产生各种各样的颜色。RGB 模型主要用于电子设备上,比如电视、计算机显示器和智能手机屏幕。
-
sRGB:
- sRGB 是一种具体的色彩空间标准,它定义了一组特定的颜色,这些颜色可以通过 RGB 加色模型来实现。sRGB 是一种较为狭窄但非常普遍的色彩空间,它被广泛应用于网页设计、摄影和打印等领域。sRGB 是由微软和惠普等公司在1990年代末期制定的一个标准,目的是创建一个可以跨多种设备(包括监视器、打印机和扫描仪)的一致色彩语言。
我是sRGB还是mono8?
BGR8 (bgr8):用于彩色图像,每个像素有三个通道(蓝、绿、红),每个通道占用 8 位。
RGB8 (rgb8):用于彩色图像,每个像素有三个通道(红、绿、蓝),每个通道占用 8 位。
灰度图像 (mono8):用于单通道灰度图像,每个像素只有一个通道,占用 8 位。
选择合适的编码格式
彩色图像:
如果你的图像数据是 BGR 格式(OpenCV 默认格式),你应该使用 bgr8 编码。
如果你的图像数据是 RGB 格式,你应该使用 rgb8 编码。
灰度图像:
如果你的图像数据是灰度图像,你应该使用 mono8 编码。
ros_frame.step这个是什么
ros_frame.step 是 sensor_msgs/Image 消息中的一个字段,表示图像每一行的字节数。它是一个非常重要的字段,因为它影响到图像数据的解析和传输。
ros_frame.step 的含义
定义:
ros_frame.step 表示图像每一行的字节数。
它通常等于图像的宽度乘以每个像素的字节数。
计算方法:
对于彩色图像(如 bgr8 或 rgb8),每个像素有 3 个通道(R、G、B),每个通道占用 1 字节。
因此,对于宽度为 width 的图像,step 计算公式为:
python
step = width * channels
示例
假设图像宽度为 1920 像素,每个像素有 3 个通道(BGR 或 RGB),则 step 计算如下:
python
width = 1920
channels = 3
step = width * channels
对于 1920x1080 的 BGR 图像:
python
ros_frame.step = 1920 * 3
为什么需要 step?
内存对齐:
在某些情况下,图像数据可能会有额外的填充字节,以保证内存对齐。这些填充字节不会被显示,但会影响每一行的总字节数。
step 包含了这些额外的填充字节,确保数据正确解析。
跨平台兼容性:
不同的操作系统或硬件可能有不同的内存对齐要求。step 确保数据在不同平台上都能正确解析。