OpenCV(開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù))是一個(gè)用于處理實(shí)時(shí)圖像和視頻的開(kāi)源庫(kù)
以下是一個(gè)簡(jiǎn)單的使用OpenCV 2在Ubuntu上進(jìn)行多線程應(yīng)用的示例:
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;
// 在此處添加您的計(jì)算機(jī)視覺(jué)處理代碼
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;
}
這個(gè)示例中,我們創(chuàng)建了一個(gè)名為processVideo
的函數(shù),該函數(shù)接受一個(gè)視頻文件路徑作為參數(shù),并在一個(gè)新線程中處理該視頻。我們使用互斥鎖(std::mutex
)來(lái)確保同時(shí)只有一個(gè)線程可以訪問(wèn)視頻幀。
g++ -o multithreaded_opencv multithreaded_opencv.cpp `pkg-config --cflags --libs opencv` -std=c++11 -pthread
./multithreaded_opencv
這將編譯并運(yùn)行程序,同時(shí)處理兩個(gè)視頻文件。請(qǐng)注意,您需要根據(jù)實(shí)際情況修改videoPaths
向量中的視頻文件路徑。
這個(gè)示例展示了如何在Ubuntu上使用OpenCV 2進(jìn)行多線程應(yīng)用。您可以根據(jù)需要修改processVideo
函數(shù)以實(shí)現(xiàn)自己的計(jì)算機(jī)視覺(jué)任務(wù)。