search
HomeBackend DevelopmentPython TutorialOpenCV cv.Mat and .txt file data reading and writing operations

This article mainly introduces the reading and writing operations of OpenCV cv.Mat and .txt file data. Now I will share it with you and give you a reference.

1. .txt file implemented in OpenCV format Reading and writing
can be implemented using cvSave and cvLoad. The format is similar to .xml/.yml. However, if you are dedicated to data reading and writing with OpenCV, it is better to use .xml/.yml file format. I prefer .yml format. , readability is great.
Use cvSave and cvLoad to read and write .txt files. The implementation method and data format are basically the same as those of .yml files.
For example: cvSave("camera_matrix.txt",camera_matrix); //Save the array header of camera_matrix and the data it refers to (a file similar to yml format)

2. Import/export others The program's .txt file data
can be implemented using conventional sprintf_s and fprintf_s, but the efficiency is relatively low. Here is a quick and easy-to-use method that uses std's steam and vector.

#include <iostream> 
#include <fstream> 
#include <iterator> 
#include <vector> 
 
using namespace std; 
 
/*---------------------------- 
 * 功能 : 将 cv::Mat 数据写入到 .txt 文件 
 *---------------------------- 
 * 函数 : WriteData 
 * 访问 : public 
 * 返回 : -1:打开文件失败;0:写入数据成功;1:矩阵为空 
 * 
 * 参数 : fileName  [in]  文件名 
 * 参数 : matData [in]  矩阵数据 
 */ 
int WriteData(string fileName, cv::Mat& matData) 
{ 
  int retVal = 0; 
 
  // 打开文件 
  ofstream outFile(fileName.c_str(), ios_base::out); //按新建或覆盖方式写入 
  if (!outFile.is_open()) 
  { 
    cout << "打开文件失败" << endl;  
    retVal = -1; 
    return (retVal); 
  } 
 
  // 检查矩阵是否为空 
  if (matData.empty()) 
  { 
    cout << "矩阵为空" << endl;  
    retVal = 1; 
    return (retVal); 
  } 
 
  // 写入数据 
  for (int r = 0; r < matData.rows; r++) 
  { 
    for (int c = 0; c < matData.cols; c++) 
    { 
      uchar data = matData.at<uchar>(r,c); //读取数据,at<type> - type 是矩阵元素的具体数据格式 
      outFile << data << "\t" ;  //每列数据用 tab 隔开 
    } 
    outFile << endl; //换行 
  } 
 
  return (retVal); 
} 
 
 
/*---------------------------- 
 * 功能 : 从 .txt 文件中读入数据,保存到 cv::Mat 矩阵 
 *   - 默认按 float 格式读入数据, 
 *   - 如果没有指定矩阵的行、列和通道数,则输出的矩阵是单通道、N 行 1 列的 
 *---------------------------- 
 * 函数 : LoadData 
 * 访问 : public 
 * 返回 : -1:打开文件失败;0:按设定的矩阵参数读取数据成功;1:按默认的矩阵参数读取数据 
 * 
 * 参数 : fileName  [in]  文件名 
 * 参数 : matData [out]  矩阵数据 
 * 参数 : matRows [in]  矩阵行数,默认为 0 
 * 参数 : matCols [in]  矩阵列数,默认为 0 
 * 参数 : matChns [in]  矩阵通道数,默认为 0 
 */ 
int LoadData(string fileName, cv::Mat& matData, int matRows = 0, int matCols = 0, int matChns = 0) 
{ 
  int retVal = 0; 
 
  // 打开文件 
  ifstream inFile(fileName.c_str(), ios_base::in); 
  if(!inFile.is_open()) 
  { 
    cout << "读取文件失败" << endl; 
    retVal = -1; 
    return (retVal); 
  } 
 
  // 载入数据 
  istream_iterator<float> begin(inFile);  //按 float 格式取文件数据流的起始指针 
  istream_iterator<float> end;     //取文件流的终止位置 
  vector<float> inData(begin,end);   //将文件数据保存至 std::vector 中 
  cv::Mat tmpMat = cv::Mat(inData);    //将数据由 std::vector 转换为 cv::Mat 
 
  // 输出到命令行窗口 
  //copy(vec.begin(),vec.end(),ostream_iterator<double>(cout,"\t"));  
 
  // 检查设定的矩阵尺寸和通道数 
  size_t dataLength = inData.size(); 
  //1.通道数 
  if (matChns == 0) 
  { 
    matChns = 1; 
  } 
  //2.行列数 
  if (matRows != 0 && matCols == 0) 
  { 
    matCols = dataLength / matChns / matRows; 
  }  
  else if (matCols != 0 && matRows == 0) 
  { 
    matRows = dataLength / matChns / matCols; 
  } 
  else if (matCols == 0 && matRows == 0) 
  { 
    matRows = dataLength / matChns; 
    matCols = 1; 
  } 
  //3.数据总长度 
  if (dataLength != (matRows * matCols * matChns)) 
  { 
    cout << "读入的数据长度 不满足 设定的矩阵尺寸与通道数要求,将按默认方式输出矩阵!" << endl; 
    retVal = 1; 
    matChns = 1; 
    matRows = dataLength; 
  }  
 
  // 将文件数据保存至输出矩阵 
  matData = tmpMat.reshape(matChns, matRows).clone(); 
   
  return (retVal); 
}

Related recommendations:

Read txt text line by line under python3.4.3 and remove duplicates Methods

The above is the detailed content of OpenCV cv.Mat and .txt file data reading and writing operations. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Python vs. C  : Learning Curves and Ease of UsePython vs. C : Learning Curves and Ease of UseApr 19, 2025 am 12:20 AM

Python is easier to learn and use, while C is more powerful but complex. 1. Python syntax is concise and suitable for beginners. Dynamic typing and automatic memory management make it easy to use, but may cause runtime errors. 2.C provides low-level control and advanced features, suitable for high-performance applications, but has a high learning threshold and requires manual memory and type safety management.

Python vs. C  : Memory Management and ControlPython vs. C : Memory Management and ControlApr 19, 2025 am 12:17 AM

Python and C have significant differences in memory management and control. 1. Python uses automatic memory management, based on reference counting and garbage collection, simplifying the work of programmers. 2.C requires manual management of memory, providing more control but increasing complexity and error risk. Which language to choose should be based on project requirements and team technology stack.

Python for Scientific Computing: A Detailed LookPython for Scientific Computing: A Detailed LookApr 19, 2025 am 12:15 AM

Python's applications in scientific computing include data analysis, machine learning, numerical simulation and visualization. 1.Numpy provides efficient multi-dimensional arrays and mathematical functions. 2. SciPy extends Numpy functionality and provides optimization and linear algebra tools. 3. Pandas is used for data processing and analysis. 4.Matplotlib is used to generate various graphs and visual results.

Python and C  : Finding the Right ToolPython and C : Finding the Right ToolApr 19, 2025 am 12:04 AM

Whether to choose Python or C depends on project requirements: 1) Python is suitable for rapid development, data science, and scripting because of its concise syntax and rich libraries; 2) C is suitable for scenarios that require high performance and underlying control, such as system programming and game development, because of its compilation and manual memory management.

Python for Data Science and Machine LearningPython for Data Science and Machine LearningApr 19, 2025 am 12:02 AM

Python is widely used in data science and machine learning, mainly relying on its simplicity and a powerful library ecosystem. 1) Pandas is used for data processing and analysis, 2) Numpy provides efficient numerical calculations, and 3) Scikit-learn is used for machine learning model construction and optimization, these libraries make Python an ideal tool for data science and machine learning.

Learning Python: Is 2 Hours of Daily Study Sufficient?Learning Python: Is 2 Hours of Daily Study Sufficient?Apr 18, 2025 am 12:22 AM

Is it enough to learn Python for two hours a day? It depends on your goals and learning methods. 1) Develop a clear learning plan, 2) Select appropriate learning resources and methods, 3) Practice and review and consolidate hands-on practice and review and consolidate, and you can gradually master the basic knowledge and advanced functions of Python during this period.

Python for Web Development: Key ApplicationsPython for Web Development: Key ApplicationsApr 18, 2025 am 12:20 AM

Key applications of Python in web development include the use of Django and Flask frameworks, API development, data analysis and visualization, machine learning and AI, and performance optimization. 1. Django and Flask framework: Django is suitable for rapid development of complex applications, and Flask is suitable for small or highly customized projects. 2. API development: Use Flask or DjangoRESTFramework to build RESTfulAPI. 3. Data analysis and visualization: Use Python to process data and display it through the web interface. 4. Machine Learning and AI: Python is used to build intelligent web applications. 5. Performance optimization: optimized through asynchronous programming, caching and code

Python vs. C  : Exploring Performance and EfficiencyPython vs. C : Exploring Performance and EfficiencyApr 18, 2025 am 12:20 AM

Python is better than C in development efficiency, but C is higher in execution performance. 1. Python's concise syntax and rich libraries improve development efficiency. 2.C's compilation-type characteristics and hardware control improve execution performance. When making a choice, you need to weigh the development speed and execution efficiency based on project needs.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software