OpenCV(开源计算机视觉库)是一个用于处理实时图像和视频的开源库
以下是一个简单的使用OpenCV 2在Ubuntu上进行多线程应用的示例:
sudo apt-get install libopencv-dev
multithreaded_opencv.cpp
的C++文件,并添加以下代码:#include<iostream>
#include<thread>
#include <mutex>
#include <opencv2/opencv.hpp>
std::mutex mtx;
void processVideo(const std::string& videoPath) {
cv::VideoCapture cap(videoPath);
if (!cap.isOpened()) {
std::cerr << "Error opening video file: "<< videoPath<< std::endl;
return;
}
cv::Mat frame;
while (true) {
{
std::unique_lock<std::mutex> lock(mtx);
cap >> frame;
if (frame.empty()) break;
// 在此处添加您的计算机视觉处理代码
cv::imshow("Frame", frame);
}
char key = cv::waitKey(30);
if (key == 'q' || key == 27) break;
}
}
int main() {
std::vector<std::string> videoPaths = {"video1.mp4", "video2.mp4"};
std::vector<std::thread> threads;
for (const auto& videoPath : videoPaths) {
threads.emplace_back(processVideo, videoPath);
}
for (auto& thread : threads) {
thread.join();
}
return 0;
}
这个示例中,我们创建了一个名为processVideo
的函数,该函数接受一个视频文件路径作为参数,并在一个新线程中处理该视频。我们使用互斥锁(std::mutex
)来确保同时只有一个线程可以访问视频帧。
g++ -o multithreaded_opencv multithreaded_opencv.cpp `pkg-config --cflags --libs opencv` -std=c++11 -pthread
./multithreaded_opencv
这将编译并运行程序,同时处理两个视频文件。请注意,您需要根据实际情况修改videoPaths
向量中的视频文件路径。
这个示例展示了如何在Ubuntu上使用OpenCV 2进行多线程应用。您可以根据需要修改processVideo
函数以实现自己的计算机视觉任务。