linux摄像头拍照命令行,如何从Linux上的摄像头拍摄静止图像(How to capture still image fro...

Unfortunately the C4V2 calls in opencv did not work for still image capture with any camera I have tried out of the box using the UVC driver.

To debug the issue I have been playing with trying to accomplish this with c code calling c4v2 directly.

I have been playing with the example code found here. It uses the method of pulling frames from the video stream.

You can compile it with:

gcc -O2 -Wall `pkg-config --cflags --libs libv4l2` filename.c -o filename

I have experimented with 3 logitech cameras. The best of the lot seems to be the Logitech C910. But even it has significant issues.

Here are the problems I have encountered trying to accomplish your same task with this code.

It works pretty much every time with width and height set to 1920x1080.

When I query other possibilities directly from the command line using for example:

v4l2-ctl --list-formats-ext

and I try some of the other "available" smaller sizes it hangs in the select waiting for the camera to release the buffer.

Also when I try to set other sizes directly from the command line using for example:

v4l2-ctl -v height=320 -v width=240 -v pixelformat=YUYV

Then check with

v4l2-ctl -V

I find that it returns the correct pixel format but quite often not the correct size.

Apparently this camera which is listed on the UVC site as being UVC and therefore v4l2 compatible is not up to snuff. I suspect it is just as bad for other cameras. The other two I tried were also listed as compatible on the site but had worse problems.

I did some more testing on the LogitechC910 after I posted this. I thought I would post the results in case it helps someone else out.

I wrote a script to test v4l2 grabber code mentioned above on all the formats the camera claims it supports when it is queried with v4l2 here are the results:

640x480 => Hangs on clearing buffer

160x120 => Works

176x144 => Works

320x176 => Works

320x240 => Works

432x240 => Works

352x288 => Works

544x288 => Works

640x360 => Works

752x416 => Hangs on clearing buffer

800x448 => Hangs on clearing buffer

864x480 => Works

960x544 => Works

1024x576 => Works

800x600 => Works

1184x656 => Works

960x720 => Works

1280x720 => Works

1392x768 => Works

1504x832 => Works

1600x896 => Works

1280x960 => Works

1712x960 => Works

1792x1008 => Works

1920x1080 => Works

1600x1200 => Works

2048x1536 => Works

2592x1944 => Hangs on clearing buffer.

It turns out that the default setting of 640x480 doesnt work and that is what trapped me and most others who have posted on message boards.

Since it is grabbing a video frame the first frame it grabs when starting up may have incorrect exposure (often black or close to it). I believe this is because since it is being used as a video camera it adjusts exposure as it goes and doesnt care about the first frames. I believe this also trapped me and other who saw the first frame as black or nearly black and thought it was some kind of error. Later frames have the correct exposure

It turns out that opencv with python wrappers works fine with this camera if you avoid the land mines listed above and ignore all the error messages. The error messages are due to the fact while the camera accepts v4l2 commands it doesnt respond correctly. So if you set the width it actually gets set correctly but it responds with an incorrect width.

To run under opencv with python wrappers you can do the following:

import cv2

import numpy

cap = cv2.VideoCapture(0) #ignore the errors

cap.set(3, 960) #Set the width important because the default will timeout

#ignore the error or false response

cap.set(4, 544) #Set the height ignore the errors

r, frame = cap.read()

cv2.imwrite("test.jpg", frame)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值