Line 168: |
Line 168: |
| |} | | |} |
| | | |
| + | === raw图片格式说明 === |
| + | RK3588的VICAP模块支持两种数据保存格式,Compact和Noncompact RAW。可以通过RKCIF的RKCIF_CMD_SET_CSI_MEMORY_MODE ioctl指令修改模式。默认情况下,输出的是Compact RAW格式。 |
| + | [[File:Compact raw and noncompact raw of rk3588 vicap.png|center|thumb|800x800px|Compact raw and noncompact raw of rk3588 VICAP]] |
| + | <br /> |
| + | ====具有填充位的图片格式(Noncompact RAW)==== |
| + | 对于10bit深度、12bit深度的像素数据,总是使用两个字节来存储一个像素。这种存储方式方便软件处理,缺点是空间占用较大。根据数据有效数据保存在高位还是低位,又分为high align和low align两种。 |
| + | |
| + | ===== Noncompact RAW(high align) ===== |
| + | 数据保存到高位,用不到的低位以0填充。RK VICAP支持的一种数据格式。 |
| + | |
| + | ===== Noncompact RAW(low align) ===== |
| + | 数据保存到低位,用不到的高位以0填充。V4L2标准的'Y10 ' (10-bit Greyscale),'Y12 ' (12-bit Greyscale)格式都是以这种方式存储的。 |
| + | |
| + | 后文提到的pixel_layer_convert转换工具,也是将Compact RAW转换为此种存储方式。方便使用图片播放器打开显示。 |
| + | ====紧密排列的图片格式(Compact RAW)==== |
| + | 像素和像素之间不会进行空bit位填充。 |
| + | |
| + | V4L2标准的'Y10P' (10-bit Greyscale (MIPI Packed)),'Y12P' (12-bit Greyscale (MIPI Packed))格式都是以这种方式存储的。 |
| + | |
| + | ==== 行对齐(line stride) ==== |
| + | 为了方便对图像进行快速操作,系统通常为每行数据提供行对齐的buffer大小。RK3588使用256字节对齐。 |
| + | |
| + | line_stride = ALIGN_UP(image_width*bits_per_pixel/8,256) |
| + | |
| + | 比如当图像宽度是1456时: |
| + | |
| + | 8bit depth,line_stride=1536。 |
| + | |
| + | 10bit depth,preferred_stride=2048。 |
| + | |
| + | 12bit depth,preferred_stride=2304。 |
| + | |
| + | ==== 转换工具 ==== |
| + | 我们编写了一个小工具:[https://github.com/veyeimaging/pixel_layer_convert pixel_layer_convert],可以很方便的将紧密排列的图片(Compact RAW)转为具有填充位的图片(Noncompact RAW(low align))。 |
| + | |
| + | 比如下面的命令,可以将一个1456宽度的compact raw10 图片转为noncompact raw10。 |
| + | |
| + | <code>./pixel_layer_convert -I R10C -i y10-1456x1088_0001.raw -o y10-1456x1088_0001_new.raw -w 1456</code> |
| + | ====raw图片播放器==== |
| + | 推荐使用[https://www.offminor.de/ vooya]作为播放器,支持GREY, 和具有填充位的图片格式。 |
| + | |
| + | Y8文件可以用这个播放器: [https://yuv-player-deluxe.software.informer.com/2.6/ YUV Displayer Deluxe]。 |
| === 应用范例 === | | === 应用范例 === |
| ====配置命令行全局变量 ==== | | ====配置命令行全局变量 ==== |
Line 293: |
Line 335: |
| | | |
| 此处的width和height配合v4l2-ctl命令的<code>roi_x</code>和<code>roi_y</code>共同组成了ROI参数。 | | 此处的width和height配合v4l2-ctl命令的<code>roi_x</code>和<code>roi_y</code>共同组成了ROI参数。 |
| + | |
| | | |
| | | |
Line 301: |
Line 344: |
| 不仅可以在一个命令中同时配置数据格式,分辨率,帧率,也可以单独修改某一项或某几项。 | | 不仅可以在一个命令中同时配置数据格式,分辨率,帧率,也可以单独修改某一项或某几项。 |
| | | |
− | === raw图片格式说明 === | + | ==== 流模式 ==== |
− | RK3588的VICAP模块支持两种数据保存格式,Compact和Noncompact RAW。可以通过RKCIF的RKCIF_CMD_SET_CSI_MEMORY_MODE ioctl指令修改模式。默认情况下,输出的是Compact RAW格式。
| + | |
− | [[File:Compact raw and noncompact raw of rk3588 vicap.png|center|thumb|800x800px|Compact raw and noncompact raw of rk3588 VICAP]] | + | ===== 设置数据格式,分辨率,帧率 ===== |
− | <br /> | + | <code>v4l2-ctl --set-ctrl roi_x=0</code> |
− | ====具有填充位的图片格式(Noncompact RAW)==== | + | |
− | 对于10bit深度、12bit深度的像素数据,总是使用两个字节来存储一个像素。这种存储方式方便软件处理,缺点是空间占用较大。根据数据有效数据保存在高位还是低位,又分为high align和low align两种。
| + | <code>v4l2-ctl --set-ctrl roi_y=0</code> |
| + | |
| + | <code>media-ctl -d /dev/media0 --set-v4l2 '"m00_b_mvcam 7-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</code> |
| + | |
| + | ===== 可使用如下命令进行帧率统计 ===== |
| + | <code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY--stream-mmap --stream-count=-1 --stream-to=/dev/null</code> |
| + | |
| + | ===== 保存图片到文件 ===== |
| | | |
− | ===== Noncompact RAW(high align) =====
| + | * raw8格式 |
− | 数据保存到高位,用不到的低位以0填充。RK VICAP支持的一种数据格式。
| |
| | | |
− | ===== Noncompact RAW(low align) ===== | + | <code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-$WIDTHx$HEIGHT.raw</code> |
− | 数据保存到低位,用不到的高位以0填充。V4L2标准的'Y10 ' (10-bit Greyscale),'Y12 ' (12-bit Greyscale)格式都是以这种方式存储的。
| |
| | | |
− | 后文提到的pixel_layer_convert转换工具,也是将Compact RAW转换为此种存储方式。方便使用图片播放器打开显示。
| + | * raw10格式 |
− | ====紧密排列的图片格式(Compact RAW)====
| |
− | 像素和像素之间不会进行空bit位填充。
| |
| | | |
− | V4L2标准的'Y10P' (10-bit Greyscale (MIPI Packed)),'Y12P' (12-bit Greyscale (MIPI Packed))格式都是以这种方式存储的。
| + | <code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-$WIDTHx$HEIGHT.raw</code> |
| | | |
− | ==== 行对齐(line stride) ====
| + | * raw12格式 |
− | 为了方便对图像进行快速操作,系统通常为每行数据提供行对齐的buffer大小。RK3588使用256字节对齐。
| |
| | | |
− | line_stride = ALIGN_UP(image_width*bits_per_pixel/8,256)
| + | <code>v4l2-ctl -d /dev/video0 --set-fmt-video=$WIDTH,height=$HEIGHT,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-$WIDTHx$HEIGHT.raw</code> |
| | | |
− | 比如当图像宽度是1456时:
| + | 图片格式请参考前面章节的描述。 |
| | | |
− | 8bit depth,line_stride=1536。
| + | ===== gstreamer应用范例 ===== |
| + | 为了方便进行安装和调试,MV系列相机提供了UYVY模式。UYVY模式支持的最大宽度为2880,使用如下命令可以进行实时预览。 |
| | | |
− | 10bit depth,preferred_stride=2048。
| + | 注意RAW系列不支持UYVY格式。 |
| | | |
− | 12bit depth,preferred_stride=2304。
| + | 我们提供了几个gstreamer例程,实现了预览功能。详见github上的[https://github.com/veyeimaging/rk356x_firefly/tree/main/linux/samples samples]目录。 |
| + | =====OpenCV的导入===== |
| + | 首先安装OpenCV: |
| | | |
− | ==== 转换工具 ====
| + | <code>sudo apt install python3-opencv</code> |
− | 我们编写了一个小工具:[https://github.com/veyeimaging/pixel_layer_convert pixel_layer_convert],可以很方便的将紧密排列的图片(Compact RAW)转为具有填充位的图片(Noncompact RAW(low align))。
| |
| | | |
− | 比如下面的命令,可以将一个1456宽度的compact raw10 图片转为noncompact raw10。
| + | 我们提供了几个将摄像头数据导入opencv的例程。详见github上的[https://github.com/veyeimaging/rk356x_firefly/tree/main/linux/samples samples]目录。 |
| | | |
− | <code>./pixel_layer_convert -I R10C -i y10-1456x1088_0001.raw -o y10-1456x1088_0001_new.raw -w 1456</code>
| + | ==== 触发模式 ==== |
− | ====raw图片播放器==== | |
− | 推荐使用[https://www.offminor.de/ vooya]作为播放器,支持GREY, 和具有填充位的图片格式。
| |
| | | |
− | Y8文件可以用这个播放器: [https://yuv-player-deluxe.software.informer.com/2.6/ YUV Displayer Deluxe]。
| |
| === i2c脚本使用说明 === | | === i2c脚本使用说明 === |
| 我们提供了shell脚本来配置参数。 | | 我们提供了shell脚本来配置参数。 |