OpenCV에서 대형 매트의 효율적인 로딩: 종합 가이드
광범위한 메모리 집약적 Mat 객체를 처리할 때 로딩 효율성은 다음과 같습니다. 최고의. OpenCV의 FileStorage 방법은 간단한 접근 방식을 제공하지만 항상 충분하지는 않습니다.
대안: 바이너리 데이터 로드
성능을 크게 향상하려면 Mat 객체를 다음 위치에 저장하고 로드하는 것을 고려하세요. 원시 바이너리 형식. 이는 FileStorage와 관련된 오버헤드를 우회하여 상당한 시간 절약으로 이어집니다.
matwrite 및 matread 함수 구현
바이너리 로딩을 구현하려면 matwrite 및 matread 함수를 활용하세요.
void matwrite(const string& filename, const Mat& mat) { ... } Mat matread(const string& filename) { ... }
공연 비교
벤치마크는 FileStorage와 바이너리 로딩 간의 로딩 속도에 큰 차이가 있음을 보여줍니다.
Using FileStorage: 5523.45 ms Using Raw: 50.0879 ms Using FileStorage: (out of memory) Using Raw: 197.381 ms
추가 참고 사항
코드 예
다음 코드는 저장, 로드 및 성능을 위해 matwrite 및 matread를 사용하는 방법을 보여줍니다. 테스트:
#include <opencv2/opencv.hpp> #include <iostream> #include <fstream> using namespace std; using namespace cv; int main() { // Save randomly generated data Mat m(1024*256, 192, CV_8UC1); randu(m, 0, 1000); matwrite("raw.bin", m); // Load saved matrix double tic = getTickCount(); Mat m1 = matread("raw.bin"); // Calculate loading time double toc = (getTickCount() - tic) * 1000. / getTickFrequency(); cout << "Using Raw: " << toc << " ms" << endl; }
대형 Mat 객체에 바이너리 로딩을 사용하면 효율성을 크게 높이고 로딩 시간을 줄여 OpenCV 애플리케이션을 최적화하여 최적의 성능을 얻을 수 있습니다.
위 내용은 대형 OpenCV 매트를 효율적으로 로드하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!