Changes

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

Navigation menu