我使用在Ubuntu 12.04 64位的OpenCV 2.4.5。 我希望能够从我的罗技C310网络摄像头设置输入的分辨率。 相机以每秒30帧到1280×960支持了,我能在这个分辨率在guvcview查看视频。 但是OpenCV的总是得到仅为640×480视频。
试图改变与cap.set(CV_CAP_PROP_FRAME_WIDTH,1280)的分辨率和cap.set(CV_CAP_PROP_FRAME_HEIGHT,960)创建VideoCapture帽之后立即没有任何影响; 试图立即将它们得到每一帧导致程序立即崩溃之前。 我不能减少使用这种方法的分辨率无论是。 我也收到错误 “HIGHGUI ERROR:V4L / V4L2:VIDIOC_S_CROP”。 我想这可能是相关的,因为它创建VideoCapture时出现一次,有一次,当我尝试设置宽度和高度(但是,奇怪的是,不,如果我尝试设置只是其中之一)。
我知道我不是第一个有这个问题,但我还没有找到一个解决方案相比,谷歌搜索和SO和其他互联网(其中有很多方面我已经试过无济于事上冲刷后的回答这个StackOverflow的问题: 在OpenCV中提高相机拍摄分辨率 )。 这是OpenCV中的错误吗? 如果是这样,这是一个相当明显的一个。
下面是显示的问题(只是改性的OpenCV中的视频显示用代码版本)的代码的示例:
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
Mat image;
namedWindow("Video", CV_WINDOW_AUTOSIZE);
while(1)
{
// cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
// cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
cap >> image;
imshow("Video", image);
if(waitKey(10) == 99 ) break;
}
return
}
正因为如此,这得到如上所述我两个“HIGHGUI ERROR” S和我得到一个640×480的输出。 我知道,160x120的是,我的相机从运行支持的分辨率v4l2-ctl --list-formats-ext
。 如果我取消while循环两个注释掉线,该程序立即崩溃。
这些可能涉及或有可能的解决方案: http://answers.opencv.org/question/11427/decreasing-capture-resolution-of-webcam/ , http://answers.opencv.org/question/30062/error-设置-分辨率的视频捕获装置/
这是在为v41“版本”(构建)的OpenCV 2.4(包括2.4.12)中的错误,但是错误不在libv4l版本。 对于OpenCV的3.1.0,无论是为v41也不libv4l版本有错误。
(你的错误错误消息HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
表明您拥有为v41版本;该消息是在cap_v4l.cpp,看代码 ,但不是在cap_libv4l.cpp。)
一种解决方法获得的OpenCV 2.4的版本为v41比640×480等固定的分辨率工作正在改变的值DEFAULT_V4L_WIDTH
和DEFAULT_V4L_HEIGHT
模块/ highgui / src目录/ cap_v4l.cpp和重新建设的OpenCV,荣誉给这个答案 。
如果你想建立的libv4l版本代替,所有你可能需要做的是安装libv4l-dev
重建OpenCV的; WITH_LIBV4L
被默认为我启用。 如果不是,你cmake的命令应该包含
-D WITH_LIBV4L=ON
CMake的输出(或version_string.tmp)的libv4l版本包含类似
Video I/O:
...
V4L/V4L2: Using libv4l1 (ver 0.8.6) / libv4l2 (ver 0.8.6)
(对于为v41的构建,它只是V4L/V4L2: NO/YES
)。
你可以用用v412-CTL设置拍摄的视频的帧大小像下面。
v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1
您可以在此了解更多信息链接
只是想补充我的CMake的选项,以建立与Java基于乌尔里希对OpenCV的3.2.0全面的答案树莓派3。 做一个/在同一个文件夹中的OpenCV CMakeList.txt建立一个文件夹,并为新的执行这个脚本/ build文件夹:
须藤cmake的-D CMAKE_BUILD_TYPE = RELEASE -D WITH_OPENCL = OFF -D BUILD_PERF_TESTS = OFF -D BUILD_SHARED_LIBS = OFF -D JAVA_INCLUDE_PATH = $ JAVA_HOME /包括-D JAVA_AWT_LIBRARY = $ JAVA_HOME / JRE / LIB /臂/ libawt.so -D JAVA_JVM_LIBRARY = $ JAVA_HOME / JRE / LIB /臂/服务器/ libjvm.so -D CMAKE_INSTALL_PREFIX =的/ usr /本地-D BUILD_TESTS = OFF -D WITH_MATLAB = OFF -D WITH_CUFFT = OFF -D WITH_CUDA = OFF -D WITH_CUBLAS = OFF -D WITH_GTK = OFF -D WITH_WEBP = OFF -D BUILD_opencv_apps = OFF -D BUILD_PACKAGE = OFF -D WITH_LIBV4L = ON ..
也许你可以试试这个,但我不知道这是否是你想要什么:
#include <X11/Xlib.h>
Display* disp = XOpenDisplay(NULL);
Screen* scrn = DefaultScreenOfDisplay(disp);
int height = scrn->height;
int width = scrn->width;
//Create window for the ip cam video
cv::namedWindow("Front", CV_WINDOW_NORMAL);
cvSetWindowProperty( "Front", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN );
//Position of the screen where the video is shows
cvMoveWindow("Front", 0, 0);
cvResizeWindow( "Front", width, height );
这样你得到的全屏幕的任何屏幕。