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脚本来配置参数。