有没有办法从OpenCV访问相机驱动程序以禁用图像优化?
当我开始玩相机时,我写了一个简单的应用程序来测量FPS速率,但我只收到了15帧,而不是30 FPS,640x480分辨率,如相机的规格所示。
我做了一些研究,发现我可以在“Logitech Webcam-Software”(Logitech网站上的附加软件)上禁用“RightLight”功能。我做到了并且有30帧。
我想以编程方式确保在不使用其他软件的情况下启动应用程序时关闭“RightLight”功能。有办法吗?
void testFPS() {
cv::VideoCapture cap(0);
//cap.set(cv::CAP_PROP_SETTINGS, 1); //open the settings menu
cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
cap.set(cv::CAP_PROP_FPS, 30);
cap.set(cv::CAP_PROP_AUTOFOCUS, 0);
int frameCounter = 0;
std::stringstream ss;
cv::Mat mat;
auto start = std::chrono::high_resolution_clock::now();
while (true) {
cap >> mat;
frameCounter++;
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = finish - start;
double fps = frameCounter / elapsed.count();
ss.str("");
ss << "FPS: " << fps;
cv::putText(mat, ss.str(), cv::Point(30, 30), cv::FONT_HERSHEY_SIMPLEX, 0.8, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
cv::imshow("Win", mat);
if (cv::waitKey(30) >= 0) { //esc
break;
}
}
}
P.S。
我发现了另一件奇怪的事(bug)。如果我断开相机并再次连接,我只收到15帧,“Logitech Webcam-Software”显示“RightLight”功能被禁用。但是,在这种情况下,我只从OpenCV的VideoCaputre对象接收了15帧。要解决这个问题,我必须启用“RightLight”功能并再次禁用它,以确保我将收到30帧。