258浏览
查看: 258|回复: 5

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

[复制链接]
先不废话,直接上代码。 可以把“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,大大减小了跑图像算法的延时。

hnyzcj  版主

发表于 2022-4-14 20:48:35

j简单、粗暴、有效,哈哈哈哈
回复

使用道具 举报

gada888  版主

发表于 2022-4-16 07:21:32

can't open camera by index
回复

使用道具 举报

glwz007  高级技师

发表于 2022-4-17 16:38:51

请问如何加载摄像头呢?
回复

使用道具 举报

Angleo  初级技匠
 楼主|

发表于 2022-4-20 14:36:28

gada888 发表于 2022-4-16 07:21
can't open camera by index

这里可以改成 1 或者 -1试试看:
cap = cv2.VideoCapture(-1)
也有可能usb摄像头不是linux免驱的。 用ssh登陆以后用命令行看看是不是有摄像头设备:
ls /dev/video*
如果有设备应该会有如下的显示
  1. root@unihiker:~# ls /dev/video*
  2. /dev/video0  /dev/video1
复制代码
回复

使用道具 举报

Forgotten  版主

发表于 2022-5-7 23:52:22

好方法,学到了,简单让图片全屏只需要加两条语句就好了
SatMay-202205072306..png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail