我在Ubuntu 12.04LTS中編寫了一個簡單的Opencv程序,用於調整網絡攝像頭(Logitech C525)設置,如亮度和曝光等。Ubuntu Opencv相機設置V4L2錯誤曝光控制不支持
它工作在Windows 7罰款,但在Linux中它給我這個錯誤
$ ./adjust-camera
init done
opengl support available
HIGHGUI ERROR: V4L2: Unable to get property Exposure(9963793) - Invalid argument
HIGHGUI ERROR: V4L: Exposure control in V4L is not supported
HIGHGUI ERROR: V4L: Property Exposure(15) not supported by device
HIGHGUI ERROR: V4L: Property Exposure(15) not supported by device
HIGHGUI ERROR: V4L: Property Exposure(15) not supported by device
在一個側面說明,如果我在啓動Ubuntu和插上攝像頭,我可以像奶酪的程序打開它。但是,如果我用相機運行我的Opencv程序,關閉Opencv後,相機將不再能夠在奶酪上顯示。我必須重新啓動Ubuntu才能與其他任何設備一起工作。
下面是代碼調整,camera.cpp
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp" // Basic OpenCV structures (cv::Mat)
#include "opencv2/highgui/highgui.hpp" // Video write
#include "string.h"
using namespace cv;
using namespace std;
void calibrateCamera();
void getCameraVals();
VideoCapture cam(0);
//variables for cam camera
int brightness_slider=125;
int contrast_slider=86;
int gain_slider=77;
int saturation_slider=34;
int exposure_slider=6; //exposure range is from 0 to -7.
int main()
{
namedWindow("camera 1",WINDOW_AUTOSIZE);
Mat frame;
getCameraVals();
createTrackbar("Brightness", "camera 1", &brightness_slider, 255);
createTrackbar("Contrast", "camera 1", &contrast_slider, 255);
createTrackbar("Gain", "camera 1", &gain_slider, 255);
createTrackbar("Saturation", "camera 1", &saturation_slider, 255);
createTrackbar("Exposure", "camera 1", &exposure_slider, 2047);
while(true)
{
calibrateCamera();
cam>>frame;
imshow("camera 1",frame);
if(waitKey(3)>=0) break;
}
return(0);
}
void getCameraVals()
{
brightness_slider = cam.get(CV_CAP_PROP_BRIGHTNESS);
contrast_slider = cam.get(CV_CAP_PROP_CONTRAST);
gain_slider=cam.get(CV_CAP_PROP_GAIN);
saturation_slider=cam.get(CV_CAP_PROP_SATURATION);
exposure_slider=cam.get(CV_CAP_PROP_EXPOSURE);
}
void calibrateCamera()
{
cam.set(CV_CAP_PROP_BRIGHTNESS, brightness_slider);
cam.set(CV_CAP_PROP_CONTRAST, contrast_slider);
cam.set(CV_CAP_PROP_GAIN, gain_slider);
cam.set(CV_CAP_PROP_SATURATION, saturation_slider);
cam.set(CV_CAP_PROP_EXPOSURE, exposure_slider);
//cam.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
//cam.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
}
這是我用來編譯
![enter image description here][1]ls#!/bin/bash
echo "compiling $1"
if [[ $1 == *.c ]]
then
gcc -ggdb `pkg-config --cflags opencv` -o `basename $1 .c` $1 `pkg-config --libs opencv`;
elif [[ $1 == *.cpp ]]
then
g++ -ggdb `pkg-config --cflags opencv` -o `basename $1 .cpp` $1 `pkg-config --libs opencv`;
else
echo "Please compile only .c or .cpp files"
fi
echo "Output file => ${1%.*}"
這裏是腳本什麼相機顯示器奶酪或在Windows中使用我的opencv的程序
這是OpenCV在Ubuntu上顯示的內容
有關如何解決此問題的任何想法?
我在我的MacBook內置攝像頭上試過這個程序。該程序運行,但沒有任何滑塊做任何事情,我沒有得到任何highgui錯誤。它看起來像相機的Ubuntu驅動程序不支持曝光屬性,而不是平靜地失敗它給你一個錯誤信息。 – SSteve
Linux的攝像頭支持並不是那麼棒,驅動程序的openCV實現最好是shakey。如果你知道你在做什麼,你可以潛入openCV代碼並用你的修補程序重新編譯openCV。如果這不是你的一杯茶,剩下的唯一選擇是提交bugreport /功能請求。 – Nallath
真是無賴!!!!!!我很樂意幫助驅動程序的東西,但不知道該怎麼做(也許是一個模糊的想法),但這裏的問題是時間。我需要這個儘快,所以...呃,這是現在的一個蕭條。 – user3474042