UNSOLVED SC535M设置默认相机参数画面显示不正常的问题
-
@veye_xumm 我猜,应该是 opencv它获取了sensor的最大宽度,你不能设置比它传感器更大的宽度,因为2448是可以设置的,但是显示不正常,我把width设置成2304,也是可以的
-
@dangal
opencv库对于这种内存对齐的特殊处理不完善。建议你如果想使用opencv开发,就用256的整数倍作为width。
使用c/c++可以结合prefer stride,不受此限制。 -
@veye_xumm
在测量过程中,还存在一个问题,即设置了v4l2-ctl的这些参数后 只有第一路/dev/video0 是不正常的,其他路都是正常的,开始怀疑是摄像头的问题,但是发现对调后仍然是/dev/video0 显示不正常,看起来就像是参数设置没有生效一样 但实际用opencv的show_grey.py例程 /dev/video0是显示正常的 是这些参数有什么先后顺序的问题吗?我也调整过参数的设置顺序,但还是会出现问题 -
@veye_xumm
现在有一个问题就是opencv无法设置到2560,我试过了 如果v4l2设置了2448,但是opencv宽度改成2304,那么用qv4l2打开发现,最后的宽度还是2304,现在有个问题是我这边需要大于500w像素,24482048=5013504,但是这个在jetson系列上显示不正常,如果用v4l2-ctl的话,则它只能抓一帧存到本地文件里,无法达到实时预览的效果,2304虽然正常,但是23042048=4718592,和我想要达到大于500w还是有一定的差距.
如果用c++开发,能不能提供c++的例程或者是相关SDK? -
@dangal 注意下你的v4l2-ctl 需使用 -d /dev/video* 参数来指明配置到哪个摄像头。
-
-
你好 在使用了v4l2-ctl -d /dev/video3 --set-ctrl preferred_stride=2560 --set-fmt-video=width=2448,height=2048,pixelformat=GREY --stream-mmap --stream-count=30 --stream-to=v3.raw
之后,我得到了v3.raw,然后我发现效果像是preferred_stride设置并没有生效
-
@dangal 这个文件你按照多大分辨率播放预览的?你可以抓一张,然后看看文件大小是多少字节?
-
@veye_xumm 我按照2448*2048预览的
文件大小一共150M 我抓了30帧 所以一张是5M
一张是5242880字节
-
@dangal
你还是没有理解stride的意思。
preferred_stride指一行图像数据需要的内存大小。为了硬件处理图像数据速度考虑,jetson平台设计了stride这个参数。换句话说,2448的width,实际给按照2560分配的内存大小,右侧补数据0。你需要按照25602048来预览。25602048=5242880字节
-
@veye_xumm
got it!
但是,要怎么解释我上面那个代码设置preferred_stride之后,/dev/video0的成像还是不正常呢?
我按照你的说法指定了每个设备,即每个命令 --set-ctrl preferred_stride=2560 之前都加了指定的 -d /dev/video*, 但是,当这样设置后,我opencv imshow的全部都不正常了,而且qv4l2也全部不正常,在没有指定-d的情况下 仅/dev/video0 第一路不正常 -
@veye_xumm 我有一个猜想,不知道对不对,那就是实际预览的时候 程序只会按照你设置的width和height去分配内存大小去展示图片,preferred_stride 这个参数只适用于硬件层面去分配图片内存大小?
但是,这样的话,虽然一张图片被分配了25602048个字节,但其实像素还是只有24482048?
-
@dangal
设置stride之后,实际底层是按照stride的设置值分配buffer,一路回调上来。但是python库和qv4l2依然按照上层设置的width去理解这个图片,因此造成了问题。
stride这个参数如果重新编译内核,应该是可以缩小的。具体英伟达的官网上我印象中是有写。 或者直接查找一下kernel源码更改也可以。
比如改成64 -
@veye_xumm
你好 能否给出相关的keyword,nVidia的官方doc体量太大了 搜索stride就找到这两个东西 看起来都不相关如果在Google和baidu bing等上搜索stride的话,出来的全是深度学习的步长stride
-
@dangal
我意思是到kernel源码里面找一下preferred_stride关键字。 -
@veye_xumm
我并不打算折腾更改linux源码,因为这样存在风险。除非你们已经试验过,请确认一下这样做不会导致后续有潜在的内存问题。
我现在正在考虑要不要换更好的图像传感器代替535M,比如我问你家客服的这款
这款能不能同样用ADP-N5转接板呢? 如果能,我就把535退了,换这个型号的传感器我刚刚找了linux代码仓库 发现没有preferred_stride 的关键字相关搜索结果
-
@dangal 这款是rolling shutter的。不能直接用到ADP-N5上,这个适配ADP-N4
-
@veye_xumm
rolling shutter 我可以理解为滑动窗口吗 我其实只关注这个镜头能不能摄制出大于500w像素的黑白原始照片 还有就是能不能同样适配到jetson tx2上,只要重新更新dtbs和img就能在我不改变我代码的基础上直接用 其他的方面我不是很关心 -
@dangal
还是用sc535,你测试一下配置prefer_stride为64,分辨率是2432x2048的大小。v4l2-ctl --set-ctrl preferred_stride=64 python ./v4l2dev_2_opencv_show_grey.py --width 2432--height 2048
-
@veye_xumm
哦 这样是不行的 刚刚是我忘记把args.width从2304改回默认值了,2432的内存还是撕裂的