有没有办法从 OpenCV 访问相机驱动程序以禁用图像优化?
当我开始使用相机时,我编写了一个简单的应用程序来测量 FPS 速率,但我只收到了 15 帧,而不是相机规格中所示的 640x480 分辨率的 30 FPS。
我做了一些研究,发现我可以禁用“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;
}
}
}
附言
我发现了另一个奇怪的事情(错误)。如果我断开相机并重新连接,我只会收到 15 帧,并且“Logitech Webcam-Software”显示“RightLight”功能已禁用。但是,在这种情况下,我只从 OpenCV 的 VideoCaputre 对象接收到 15 帧。为了解决这个问题,我必须启用“RightLight”功能并再次禁用它以确保我将收到 30 帧。