【安老师行空板Tips】OpenCV+摄像头全屏显示

2022-04-141.3万
AI 快速预览详细 收起
本文介绍了如何在行空板上使用OpenCV实现摄像头全屏显示。通过设置窗口全屏和图像缓存,可以实现无延时的实时显示。代码示例中展示了如何通过设置cv2.CAP_PROP_BUFFERSIZE为1来减少图像处理的延时。此外,还提供了如何通过旋转图像实现横屏显示的方法。
先不废话,直接上代码。 可以把“screen_rotation = True”改成“screen_rotation = False”试试看竖屏模式。
  1. import cv2
  2. #False:不旋转屏幕(竖屏显示,上下会有白边)
  3. #True:旋转屏幕(横屏显示)
  4. screen_rotation = True
  5. cap = cv2.VideoCapture(0)   #设置摄像头编号,如果只插了一个USB摄像头,基本上都是0
  6. cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)  #设置摄像头图像宽度
  7. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) #设置摄像头图像高度
  8. cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)     #设置OpenCV内部的图像缓存,可以极大提高图像的实时性。
  9. cv2.namedWindow('camera',cv2.WND_PROP_FULLSCREEN)    #窗口全屏
  10. cv2.setWindowProperty('camera', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)   #窗口全屏
  11. while cap.isOpened():
  12.     success, image = cap.read()
  13.     if not success:
  14.         print("Ignoring empty camera frame.")
  15.         continue
  16.     if screen_rotation: #是否要旋转屏幕
  17.         image = cv2.rotate(image, cv2.ROTATE_90_COUNTERCLOCKWISE) #旋转屏幕
  18.     cv2.imshow('camera', image)
  19.     if cv2.waitKey(5) & 0xFF == 27:
  20.         break
  21. cap.release()
复制代码

行空板的屏幕是真得香,只要用过都知道 :)。 和其他的Linux主控板不同,小巧的屏幕的在使用上需要一点技巧。

我们知道行空板屏幕的分辨率是240*320,为竖屏显示。由于OpenCV显示窗口会默认加上一些菜单,正是这些菜单影响在小分辨率上进行缩放,导致了普通使用opencv的方法没有办法做到左上角对齐。其实OpenCV其实内置了非常多的功能,来处理小屏幕的问题是小菜一碟,只要设置一下窗口全屏就可以了,OpenCV还能自己根据屏幕大小自动等比缩放图片,非常的方便。比如我们可以看到“screen_rotation = False”时的图片大小是320*240的,但由于是全屏模式,图片自动缩小到了240*180并留出了上下两条白边。

如果我们需要横屏显示的话,只要在imshow之前用cv.rotate进行旋转就可以了,我这里加了一个变量screen_rotation,就可以选择是否进行横屏显示了。

另外,提一句,这个非常有用:
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)

由于OpenCV内部是有个摄像头图像缓存的,大概存了10几张过去摄像头的图像。如果你的算法跑的比较慢,那你使用的可能是10张之前的图像,会造成很大的延时。这里把buffer设置成1,大大减小了跑图像算法的延时。

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(9)
txsz01
txsz01
我照着老师的代码用积木实现了一下,方便我们初学着使用。不过要先在扩展里添加opencv功能
大家可以参考一下

宋云辉
宋云辉
很不错很不错很不错
easy猿
easy猿
666
Coolhua
Coolhua
如何更改图像大小?不全屏显示图像,让图像显示到自己想要的坐标?谢谢!
zhouzhuofeng
zhouzhuofeng
学到了,谢谢楼主的分享
Forgotten
Forgotten
好方法,学到了,简单让图片全屏只需要加两条语句就好了

glwz007
glwz007
请问如何加载摄像头呢?
gada888
gada888
can't open camera by index
Angleo
Angleo
作者
回复gada888

这里可以改成 1 或者 -1试试看:
cap = cv2.VideoCapture(-1)
也有可能usb摄像头不是linux免驱的。 用ssh登陆以后用命令行看看是不是有摄像头设备:
ls /dev/video*
如果有设备应该会有如下的显示
[code]root@unihiker:~# ls /dev/video*
/dev/video0 /dev/video1[/code]
hnyzcj
hnyzcj
j简单、粗暴、有效,哈哈哈哈
- 没有更多了 -