>백엔드 개발 >C++ >OpenCV에서 대형 매트 개체의 로드 속도를 어떻게 높일 수 있습니까?

OpenCV에서 대형 매트 개체의 로드 속도를 어떻게 높일 수 있습니까?

DDD
DDD원래의
2024-12-01 22:51:12116검색

How Can I Speed Up Loading Large Mat Objects in OpenCV?

OpenCV에서 대형 Mat 개체를 메모리로 더 빠르게 로드

OpenCV의 FileStorage 메서드는 Mat 개체를 저장하고 검색하는 편리한 방법을 제공합니다. , 이는 대형 Mat 객체를 메모리에 로드하는 데 가장 효율적인 옵션이 아닐 수 있습니다. 다음은 상당한 속도 향상을 제공할 수 있는 몇 가지 대체 접근 방식입니다.

바이너리 파일 형식

Mat 개체를 바이너리 형식으로 저장하고 로드하면 상당한 성능 향상이 가능합니다. OpenCV의 matwrite 및 matread 기능은 이 프로세스를 용이하게 합니다. 바이너리 파일을 사용하면 OpenCV의 직렬화 및 역직렬화 절차와 관련된 오버헤드가 방지되므로 로딩 시간이 훨씬 빨라집니다.

테스트 결과

FileStorage와 바이너리 형식 간의 로드 시간 비교 작은 이미지와 큰 이미지 모두:

Using FileStorage: 5523.45 ms (small image)
Using Raw:         50.0879 ms (small image)
Using FileStorage: (out of memory) (large image)
Using Raw:         197.381 ms (large image)

코드 예

다음은 matwrite 및 matread 사용 방법을 보여주는 코드 조각입니다.

#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>

void matwrite(const std::string& filename, const cv::Mat& mat)
{
    // Save Mat object to a binary file
}

cv::Mat matread(const std::string& filename)
{
    // Load Mat object from a binary file
}

int main()
{
    // Generate random data
    cv::Mat m = cv::Mat::randu(1024*256, 192, CV_8UC1);
    
    // Save to files
    matwrite("fs.yml", m);
    matwrite("raw.bin", m);
    
    // Load from files
    cv::Mat m1 = matread("fs.yml");
    cv::Mat m2 = matread("raw.bin");
}

더 빠른 로딩을 위한 팁

  • 디버그 모드 방지: 성능 측정은 절대로 코드 실행 속도가 상당히 느려지므로 디버그 모드에서 수행됩니다.
  • 메모리 가용성 확인: FileStorage 메소드가 특히 대형 Mat 객체를 처리할 때 사용 가능한 메모리를 모두 소모하지 않는지 확인하세요.
  • 바이너리 형식 고려: 바이너리 파일 형식은 특히 대형 Mat의 경우 탁월한 속도 향상을 제공합니다. 개체.

위 내용은 OpenCV에서 대형 매트 개체의 로드 속도를 어떻게 높일 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.