2015-04-19 15 views
5

Tôi đang sử dụng openCV và tôi có đối tượng mat 95,1 loại CV_32F, mà tôi muốn ghi vào tệp nhị phân. Tôi đang sử dụng mã dưới đây tuy nhiên tôi không thể đúc một 32F đến một loại char. Có đề xuất nào không? Tôi cũng muốn thực hiện quy trình ngược lại khi đọc tệp nhị phân và lưu trữ các giá trị vào đối tượng mat cùng loại.Viết cv :: Mat thành tệp nhị phân?

try{ 
    ofstream posBinary; 
    posBinary.open("C:/Users/Dr.Mollica/Documents/TSR Datasets/signDatabasePublicFramesOnly/posSamps.bin", ios::out | ios::binary); 
    posBinary.write((char *)featureVector, sizeof(featureVector); 
} 
catch (exception X){ cout << "Error! Could not write Binary file" << endl; } 

Cũng cần lưu ý, lý do tôi muốn làm điều đó trong một tập tin nhị phân là tôi sẽ viết một số lượng lớn các vectơ vào file đó sẽ được đọc vào một thuật toán máy học. Và từ sự hiểu biết của tôi đọc và viết vào một tập tin nhị phân là cách nhanh nhất có thể.

Trả lời

5

tôi khuyên bạn nên sử dụng các API OpenCV để viết cv::Mat để xml hoặc yml tác phẩm, mà bạn sau này có thể đọc cv::Mat lại từ họ một cách dễ dàng.

Ví dụ:

cv::Mat yourMatData; 

// write Mat to file 
cv::FileStorage fs("file.yml", cv::FileStorage::WRITE); 
fs << "yourMat" << yourMatData; 

// read Mat from file 
cv::FileStorage fs2("file.yml", FileStorage::READ); 
fs2["yourMat"] >> yourMatData; 

Cập nhật: Nếu bạn thích để viết/đọc chúng đến/từ các tập tin nhị phân, trước tiên bạn có thể chuyển đổi cv::Mat để mảng/vector. Và sau đó viết mảng/vector vào các tập tin.

Để đọc tiếp, hãy xem Convert Mat to Array/Vector in OpenCV.

+0

Từ hiểu biết của tôi, việc đọc một văn bản sử dụng tệp nhị phân nhanh hơn. Tôi sẽ có một số lượng lớn các vectơ này để được đưa vào một thuật toán học tập vì vậy tôi muốn viết và đọc chúng càng nhanh càng tốt. – pdm

+1

@pdm Tôi cũng khuyên bạn nên sử dụng xml hoặc yml. Đúng là sử dụng tệp nhị phân nhanh hơn, nhưng xml hoặc yml đủ nhanh cho hầu hết các trường hợp. Hãy nhớ không kiểm tra tốc độ trong trình gỡ lỗi Visual Studio, bằng cách sử dụng xml hoặc yml cho các tệp lớn trong trình gỡ lỗi là RẤT RẤT chậm. Nếu bạn nghĩ xml hoặc yml quá lớn, bạn có thể sử dụng xml.gz hoặc yml.gz và OpenCV sẽ tự động nén tệp. – delphifirst

+0

Cảm ơn bạn Tôi nghĩ rằng tôi sẽ gắn bó với việc sử dụng một tập tin xml hoặc yml nhưng để tham khảo trong tương lai nó sẽ có thể đưa ra một ví dụ về cách này có thể được thực hiện với một tập tin nhị phân. Cảm ơn bạn một lần nữa vì những phản ứng nhanh chóng. – pdm

Các vấn đề liên quan