Rumah pembangunan bahagian belakang Tutorial Python OpenCV cv.Mat与.txt文件数据的读写操作

OpenCV cv.Mat与.txt文件数据的读写操作

May 03, 2018 pm 01:51 PM
opencv

这篇文章主要介绍了OpenCV cv.Mat 与 .txt 文件数据的读写操作,现在分享给大家,也给大家做个参考

1、按OpenCV格式实现的 .txt 文件读写
可以用 cvSave 和 cvLoad 实现,格式和 .xml/.yml 的差不多,不过如果专用与 OpenCV 的数据读写,还是用  .xml/.yml 文件格式较好,我比较喜欢 .yml 格式,可读性非常棒。
用 cvSave 和 cvLoad 读写 .txt 文件,其实现方式和数据格式与 .yml 文件基本一致。
例如:cvSave("camera_matrix.txt",camera_matrix);  //保存了 camera_matrix 的数组头以及和它所指的data(类似yml形式的文件)

2、导入/导出其它程序的 .txt 文件数据
可以用常规的 sprintf_s 和 fprintf_s 来实现,不过效率比较低,这里介绍一种快捷易用的方法,利用了 std 的 steam 和 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); 
}
Salin selepas log masuk

相关推荐:

python3.4.3下逐行读入txt文本并去重的方法

Atas ialah kandungan terperinci OpenCV cv.Mat与.txt文件数据的读写操作. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pasang panduan kajian OpenCV dengan pantas menggunakan pengurus pakej pip Pasang panduan kajian OpenCV dengan pantas menggunakan pengurus pakej pip Jan 18, 2024 am 09:55 AM

Gunakan arahan pip untuk memasang tutorial OpenCV dengan mudah, yang memerlukan contoh kod khusus OpenCV (OpenSource Computer Vision Library) ialah perpustakaan penglihatan komputer sumber terbuka Ia mengandungi sejumlah besar algoritma dan fungsi penglihatan komputer, yang boleh membantu pemaju membina imej dan aplikasi berkaitan pemprosesan video. Sebelum menggunakan OpenCV, kita perlu memasangnya terlebih dahulu. Nasib baik, Python menyediakan pip alat yang berkuasa untuk mengurus perpustakaan pihak ketiga

python analisis contoh piramid imej OpenCV python analisis contoh piramid imej OpenCV May 11, 2023 pm 08:40 PM

1. Asas teori piramid imej Piramid imej ialah sejenis ekspresi berskala imej Ia adalah struktur yang berkesan tetapi secara konseptual untuk menerangkan imej pada pelbagai resolusi. Piramid imej ialah koleksi imej dengan peleraian yang semakin rendah yang disusun dalam bentuk piramid dan diperoleh daripada imej asal yang sama. Ia diperoleh melalui persampelan ladder down, dan persampelan tidak dihentikan sehingga syarat penamatan tertentu dicapai. Kami membandingkan imej lapisan demi lapisan kepada piramid Semakin tinggi tahap, semakin kecil imej dan semakin rendah resolusi. Jadi mengapa kita membuat piramid imej? Ini kerana menukar saiz piksel kadang-kadang tidak mengubah ciri-cirinya Sebagai contoh, jika saya menunjukkan kepada anda gambar 10 juta piksel, anda boleh tahu bahawa ada orang di dalamnya Jika saya tunjukkan gambar 100,000 piksel, anda boleh juga tahu bahawa ada orang di dalamnya Tetapi bertentangan dengan rancangan itu

Tutorial pemasangan OpenCV: mesti dilihat untuk pengguna PyCharm Tutorial pemasangan OpenCV: mesti dilihat untuk pengguna PyCharm Feb 22, 2024 pm 09:21 PM

OpenCV ialah perpustakaan sumber terbuka untuk penglihatan komputer dan pemprosesan imej, yang digunakan secara meluas dalam pembelajaran mesin, pengecaman imej, pemprosesan video dan bidang lain. Apabila membangun menggunakan OpenCV, untuk menyahpepijat dan menjalankan program dengan lebih baik, ramai pembangun memilih untuk menggunakan PyCharm, persekitaran pembangunan bersepadu Python yang berkuasa. Artikel ini akan memberikan pengguna PyCharm tutorial pemasangan untuk OpenCV, dengan contoh kod khusus. Langkah Pertama: Pasang Python Pertama, pastikan anda telah memasang Python

Cara menggunakan Python+OpenCV untuk mencapai kesan menyeret petak maya Cara menggunakan Python+OpenCV untuk mencapai kesan menyeret petak maya May 15, 2023 pm 07:22 PM

1. Kesan projek 2. Proses teras 1. openCV membaca aliran video dan melukis segi empat tepat pada setiap bingkai gambar. 2. Gunakan paip media untuk mendapatkan koordinat titik kekunci jari. 3. Berdasarkan kedudukan koordinat jari dan kedudukan koordinat segi empat tepat, tentukan sama ada titik jari berada pada segi empat tepat, segi empat tepat akan mengikut pergerakan jari. 3. Penyediaan persekitaran proses kod: python:3.8.8opencv:4.2.0.32mediapipe:0.8.10.1 Nota: 1. Jika versi opencv terlalu tinggi atau terlalu rendah, beberapa masalah mungkin berlaku, seperti kamera tidak boleh dibuka, ranap , dsb. Versi python mempengaruhi versi pilihan opencv. 2. pipinstallmediapipe boleh menyebabkan op

Bagaimana untuk melukis garisan dengan anak panah dalam OpenCV menggunakan Java? Bagaimana untuk melukis garisan dengan anak panah dalam OpenCV menggunakan Java? Aug 20, 2023 pm 02:41 PM

Pakej org.opencv.imgproc pustaka JavaOpenCV mengandungi kelas yang dipanggil Imgproc yang menyediakan pelbagai kaedah untuk memproses imej input. Ia menyediakan satu set kaedah untuk melukis bentuk geometri pada imej. Untuk melukis garisan anak panah, anda perlu memanggil kaedah arrowedLine() kelas ini. Kaedah ini menerima parameter berikut: objek Mat yang mewakili imej di mana garisan akan dilukis. Objek titik mewakili dua titik antara garisan. dilukis. Objek skalar yang mewakili warna garisan. (BGR) Integer yang mewakili ketebalan garisan (lalai: 1). Contoh importorg.opencv.core.Core;importo

Bagaimana untuk melaksanakan pemprosesan video menggunakan perpustakaan PHP dan OpenCV? Bagaimana untuk melaksanakan pemprosesan video menggunakan perpustakaan PHP dan OpenCV? Jul 17, 2023 pm 09:13 PM

Bagaimana untuk melaksanakan pemprosesan video menggunakan perpustakaan PHP dan OpenCV? Abstrak: Pemprosesan video telah menjadi teknologi penting dalam aplikasi sains dan teknologi moden. Artikel ini akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP yang digabungkan dengan perpustakaan OpenCV untuk melaksanakan beberapa fungsi pemprosesan video asas, dan melampirkan contoh kod yang sepadan. Kata kunci: PHP, OpenCV, pemprosesan video, contoh kod Pengenalan: Dengan perkembangan Internet dan populariti telefon pintar, kandungan video telah menjadi bahagian yang amat diperlukan dalam kehidupan orang ramai. Walau bagaimanapun, untuk mencapai penyuntingan video dan

Dalam Python, imej boleh dibahagikan dan diekstrak menggunakan kaedah daripada perpustakaan OpenCV. Dalam Python, imej boleh dibahagikan dan diekstrak menggunakan kaedah daripada perpustakaan OpenCV. May 08, 2023 pm 10:55 PM

Pembahagian dan pengekstrakan imej: Objek latar depan dibahagikan atau diekstrak daripada imej sebagai imej sasaran. Latar belakang itu sendiri tidak berminat Algoritma aliran air dan segmen algoritma GrabCut dan mengekstrak imej. Gunakan algoritma aliran air untuk mencapai pembahagian dan pengekstrakan imej Algoritma aliran air membandingkan imej dengan permukaan rupa bumi geografi untuk mencapai pembahagian imej ini sangat berkesan. Prinsip Algoritma Mana-mana imej skala kelabu boleh dianggap sebagai permukaan rupa bumi geografi Kawasan dengan nilai skala kelabu yang tinggi boleh dilihat sebagai puncak gunung, dan kawasan dengan nilai skala kelabu yang rendah boleh dilihat sebagai lembah. Imej di sebelah kiri ialah imej asal, dan imej di sebelah kanan ialah "permukaan topografi" yang sepadan. Proses ini memisahkan imej kepada dua set berbeza: lembangan tadahan dan garisan tadahan air. Empangan yang kami bina adalah garisan air, iaitu imej asal

Pemula sila baca: Tutorial terperinci tentang cara memasang OpenCV dalam PyCharm Pemula sila baca: Tutorial terperinci tentang cara memasang OpenCV dalam PyCharm Feb 26, 2024 pm 03:24 PM

PyCharm ialah persekitaran pembangunan bersepadu (IDE) Python yang kuat dibangunkan oleh JetBrains Ia menyediakan pelbagai fungsi dan alatan untuk membantu pembangun Python menulis kod, program nyahpepijat dan mengurus projek. Menggunakan OpenCV, perpustakaan penglihatan komputer yang berkuasa, dalam PyCharm, anda boleh melakukan pemprosesan imej, pemprosesan video dan tugas lain dengan mudah. Artikel ini akan memperincikan langkah untuk memasang dan mengkonfigurasi OpenCV dalam PyCharm dan memberikan contoh kod khusus. 1.An

See all articles