欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于用opencv 设置摄像头读分辨率问题的若干说明

程序员文章站 2024-02-22 10:04:47
...

在做一个人脸识别的软件时,被一个问题困扰很久。摄像头读取得图像只能小于480*320,比这个尺寸大就无法读取,但使用摄像头厂家提供的软件就可以读出高分辨率的。前期一直以为是usb2.0导致的带宽不够,但厂家的软件就可以,这就不对了。直到读了这篇博文才发现问题所在,现在可以读取的分辨率可以达到1280*960。

原文地址为:https://blog.csdn.net/kyjl888/article/details/69367912

 

1 问题最初起因

我想充分利用相机高分辨率来提高视角,故用opencv直接设置摄像机分辨率。不幸的我倒霉出现问题。

VideoCapture类读AVI视频可以设置高分辨率1294*964,读摄像头为啥不能设置1294*964,可以设置640*480,也可以设置320*240

有读摄像头设置分辨率1294*964成功的吗,相机要求视场大,距离目标不能太远,要求稳定。所以就用最高分辨率了。
是我相机问题,还是VideoCapture类问题 

 

2 问题表现形式

2.1  ERROT: SampleCB() - buffer sizes do not match 解决方案

cap.set(CV_CAP_PROP_FRAME_WIDTH,1294);

cap.set(CV_CAP_PROP_FRAME_HEIGHT,964);

关于用opencv 设置摄像头读分辨率问题的若干说明

 

 

摄像头摄取的图片超出了OpenCV的最大限度,造成缓冲区大小不匹配:

解决方法很简单。

    cv::VideoCapture capture(1);

double width=capture.get(CV_CAP_PROP_FRAME_WIDTH);

double height=capture.get(CV_CAP_PROP_FRAME_HEIGHT);

capture.set(CV_CAP_PROP_FRAME_WIDTH,width);

capture.set(CV_CAP_PROP_FRAME_HEIGHT,height);

参考 的http://blog.csdn.net/jia_zhengshen/article/details/9980495

2.2 但没有解决,因为默认为VideoCapture  640*480

 

VideoCapture cap(1);

//double width=cap.get(CV_CAP_PROP_FRAME_WIDTH);

//double height=cap.get(CV_CAP_PROP_FRAME_HEIGHT);

//cap.set(CV_CAP_PROP_FRAME_WIDTH,width);

//cap.set(CV_CAP_PROP_FRAME_HEIGHT,height);

 VideoCapture 或basler 相机默认为640*480 

 

VideoCapture capture(1);//默认为640*480,不可设置再大,可以设置再小

//VideoCapture capture("1.avi");//读取视频1294*964--640*480

//capture.set(CV_CAP_PROP_FRAME_WIDTH,1294);//

//capture.set(CV_CAP_PROP_FRAME_HEIGHT,964);

 

//double width=capture.get(CV_CAP_PROP_FRAME_WIDTH);

//double height=capture.get(CV_CAP_PROP_FRAME_HEIGHT);

//capture.set(CV_CAP_PROP_FRAME_WIDTH,width);

//capture.set(CV_CAP_PROP_FRAME_HEIGHT,height);

关于用opencv 设置摄像头读分辨率问题的若干说明

 

2.3 但可以设置再小

关于用opencv 设置摄像头读分辨率问题的若干说明

 

2.4  摄像机采集图像时出现了问题图像是条状

一般使用,摄像机自带的软件,打开摄像机,设置摄像机的分辨率是没有问题的。如果你使用其他软件,打开摄像机采集图像时出现了问题。问题就是您读取得图像是条状。

关于用opencv 设置摄像头读分辨率问题的若干说明关于用opencv 设置摄像头读分辨率问题的若干说明

 

 

这说明你摄像设置的摄像机分辨率是有问题的。

2.5 自带软件 可以,SDK可以 设置高分辨率1294*964

关于用opencv 设置摄像头读分辨率问题的若干说明

 

3 问题说明

设置摄像机分辨率的问题。最小分辨率,宽度为4,高度为3。以此类推应该为4的倍数或3的倍数。你可以通过videocapture成员函数set来设置,摄像机的分辨率。videocapture默认的情况下为640×480。

3.1

 opencv 可以   4-3 8-6  16-12  32-24  320-240  640-480  960-720 1280-960

4-2,4-6不可以 1288-966 不可以

1284-963可以

 

capture.set(CV_CAP_PROP_FRAME_WIDTH,4);////可以显示 但8*6最小

capture.set(CV_CAP_PROP_FRAME_HEIGHT,3);

关于用opencv 设置摄像头读分辨率问题的若干说明

capture.set(CV_CAP_PROP_FRAME_WIDTH,960);//可以

capture.set(CV_CAP_PROP_FRAME_HEIGHT,720);

 

capture.set(CV_CAP_PROP_FRAME_WIDTH,1284);//最大

capture.set(CV_CAP_PROP_FRAME_HEIGHT,963);

关于用opencv 设置摄像头读分辨率问题的若干说明

关于用opencv 设置摄像头读分辨率问题的若干说明

 

 

笔记本摄像头禁用方法

参考http://wenda.so.com/q/1460885382721621?src=140

两种方法实现摄像头的禁用:

1、部分品牌和型号的笔记本电脑有禁用摄像头的快捷键,比如THINKPAD E450,该机使用快捷键FN+F7禁用或者启用摄像头,如图:

2、在设备管理器里禁用摄像头,右键点击“计算机”,选择“管理”,在左侧点击“设备管理器”,可以在图像设备下找到摄像头,右键点击,选择禁用即可,如图:

 关于用opencv 设置摄像头读分辨率问题的若干说明

 

 

 关于用opencv 设置摄像头读分辨率问题的若干说明

 

opencv读取百万高清摄像头。先设置摄像头分辨率。

 

opencv设置USB免驱动摄像头问题 (liunx)

问题来源:

用笔记本接USB 摄像机opencv代码采集视频数据,保存的视频AVI 提示 错误 [无法解码多工传送的流]

保存avi视频问题(与摄像机分辨率有关)--- VideoWriter 问题

 
  1. capture.set(CV_CAP_PROP_FRAME_WIDTH, videoSize.width);

  2. capture.set(CV_CAP_PROP_FRAME_HEIGHT, videoSize.height);

  3. VideoWriter writer(saveFileName, CV_FOURCC('X','V','I','D'), rate, videoSize,isColor);

1.视频存储为摄像机分辨率的整数倍分

摄像机分辨率为1280*720

视频可以存为-w=1280 -h=720 /-w=640 -h=360-/ -w=320 -h=240-/ ......

视频如果存为-w=1960 -h=1080 /-w=800 -h=600   提示 错误 [无法解码多工传送的流]

关于用opencv 设置摄像头读分辨率问题的若干说明

在窗口显示没有问题

w=1960 -h=1080 /-w=1280 -h=720

关于用opencv 设置摄像头读分辨率问题的若干说明

-w=800 -h=600 (不在中心)

关于用opencv 设置摄像头读分辨率问题的若干说明

 

图片分辨率 imwrite

图片不在中心问题(图片问题比视频少)

在上诉设置中截图保存,得到的分辨率也不一定为设置的分辨率    摄像机分辨率为1280*720

-w=1960 -h=1080/ -w=1000 -h=720 ======= 1280*720

-w=880 -h=600/880 720=================960*540

-w=600 -h=480/640 720 ===============640*480

-w=600 -h=400 ============640*360

 
  1. capture.set(CV_CAP_PROP_FRAME_WIDTH, videoSize.width);

  2. capture.set(CV_CAP_PROP_FRAME_HEIGHT, videoSize.height);

  3. imwrite(fname,frame);//imwrite函数与

关于用opencv 设置摄像头读分辨率问题的若干说明

 

 

 

 

关于用opencv 设置摄像头读分辨率问题的若干说明

关于用opencv 设置摄像头读分辨率问题的若干说明

 

 

另一个摄像机1080P 1920 x 1080分辨率

视频

1920 x 1080   1280 x 720 -ok

图片

-w=660 -h=720/ -w=990 -h=550 /-w=880 -h=600 ======800*600

-w=440 -h=550 ======640*480

 

与硬件摄像机本身分辨率和opencv软件有关. 

相关标签: 上位机