ホームページ バックエンド開発 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 ファイル形式を使用することをお勧めします。とても読みやすいからです。
.txtファイルの読み書きにはcvSaveとcvLoadを使用します。実装方法やデータ形式は基本的に.ymlファイルと同じです。
例: cvSave("camera_matrix.txt",camera_matrix); //camera_matrix の配列ヘッダーとそれが参照するデータを保存します (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); 
}
ログイン後にコピー

関連する推奨事項:

Python3.4.3でtxtテキストを一行ずつ読んで重複を削除する方法

以上がOpenCV cv.Mat および .txt ファイルのデータの読み取りおよび書き込み操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

pip パッケージ マネージャーを使用して OpenCV スタディ ガイドをすばやくインストールする pip パッケージ マネージャーを使用して OpenCV スタディ ガイドをすばやくインストールする Jan 18, 2024 am 09:55 AM

pip コマンドを使用すると、特定のコード サンプルが必要な OpenCV チュートリアルを簡単にインストールできます。OpenCV (OpenSource Computer Vision Library) は、オープン ソースのコンピュータ ビジョン ライブラリです。これには、開発者がイメージを迅速に構築するのに役立つ多数のコンピュータ ビジョン アルゴリズムと関数が含まれていますおよびビデオ処理関連のアプリケーション。 OpenCV を使用する前に、まず OpenCV をインストールする必要があります。幸いなことに、Python にはサードパーティのライブラリを管理するための強力なツール pip が用意されています。

Python OpenCVイメージピラミッドの例の分析 Python OpenCVイメージピラミッドの例の分析 May 11, 2023 pm 08:40 PM

1. 画像ピラミッドの理論的基礎 画像ピラミッドは画像のマルチスケール表現の一種であり、複数の解像度の画像を説明するのに効果的かつ概念的に単純な構造です。画像ピラミッドは、同じ元の画像から派生した、ピラミッド状に配置された、徐々に解像度が低くなる画像のコレクションです。ラダーダウンサンプリングにより取得され、一定の終了条件に達するまでサンプリングは停止されません。画像をレイヤーごとにピラミッド状に比較します。レベルが高くなるほど、画像は小さくなり、解像度は低くなります。では、なぜ画像ピラミッドを作成するのでしょうか?これは、ピクセルのサイズを変更してもその特性が変わらない場合があるためです。たとえば、1,000 万ピクセルの写真を見せれば、その中に人がいることがわかります。10 万ピクセルの写真を見せれば、その中に人がいることがわかります。 、その中に人がいることもわかります。しかし計画に反して

OpenCV インストール チュートリアル: PyCharm ユーザー必読 OpenCV インストール チュートリアル: PyCharm ユーザー必読 Feb 22, 2024 pm 09:21 PM

OpenCV は、コンピューター ビジョンおよび画像処理用のオープン ソース ライブラリであり、機械学習、画像認識、ビデオ処理などの分野で広く使用されています。 OpenCV を使用して開発する場合、プログラムのデバッグと実行を改善するために、多くの開発者は強力な Python 統合開発環境である PyCharm の使用を選択します。この記事では、PyCharm ユーザーに OpenCV のインストール チュートリアルと具体的なコード例を提供します。ステップ 1: Python をインストールする まず、Python がインストールされていることを確認します。

Python+OpenCVで仮想四角形をドラッグした効果を実現する方法 Python+OpenCVで仮想四角形をドラッグした効果を実現する方法 May 15, 2023 pm 07:22 PM

1. プロジェクト エフェクト 2. コア プロセス 1. openCV はビデオ ストリームを読み取り、画像の各フレームに四角形を描画します。 2. mediapipe を使用して、指のキー ポイントの座標を取得します。 3. 指の座標位置と長方形の座標位置に基づいて、指の先端が長方形上にあるかどうかを判断し、長方形上にある場合には、長方形は指の動きに追従します。 3. コード処理環境の準備: python:3.8.8opencv:4.2.0.32mediapipe:0.8.10.1 注: 1. opencv のバージョンが高すぎたり低すぎたりすると、カメラが開けないなどの問題が発生する可能性があります。 Python のバージョンは、opencv のオプションのバージョンに影響します。 2. pipinstallmediapipe は op を引き起こす可能性があります

Javaを使用してOpenCVで矢印付きの線を描くにはどうすればよいですか? Javaを使用してOpenCVで矢印付きの線を描くにはどうすればよいですか? Aug 20, 2023 pm 02:41 PM

JavaOpenCV ライブラリの org.opencv.imgproc パッケージには、入力画像を処理するためのさまざまなメソッドを提供する Imgproc というクラスが含まれています。画像上に幾何学的形状を描画するための一連のメソッドを提供します。矢印付きの線を描画するには、このクラスの arrowedLine() メソッドを呼び出す必要があります。このメソッドは次のパラメータを受け入れます: 線が描画されるイメージを表す Mat オブジェクト。線間の 2 点を表す Point オブジェクト。線の色を表す Scalar オブジェクト。 (BGR) 線の太さを表す整数 (デフォルト: 1)。例 importorg.opencv.core.Core;importo

PHPとOpenCVライブラリを使用してビデオ処理を実装するにはどうすればよいですか? PHPとOpenCVライブラリを使用してビデオ処理を実装するにはどうすればよいですか? Jul 17, 2023 pm 09:13 PM

PHPとOpenCVライブラリを使用してビデオ処理を実装するにはどうすればよいですか?要約: ビデオ処理は、現代の科学技術応用において重要な技術となっています。この記事では、PHP プログラミング言語を OpenCV ライブラリと組み合わせて使用​​して、いくつかの基本的なビデオ処理機能を実装する方法を紹介し、対応するコード例を添付します。キーワード: PHP、OpenCV、ビデオ処理、コード例 はじめに: インターネットの発達とスマートフォンの普及により、ビデオコンテンツは人々の生活に欠かせないものになりました。ただし、ビデオ編集を実現するには、

Python では、OpenCV ライブラリのメソッドを使用して画像をセグメント化して抽出できます。 Python では、OpenCV ライブラリのメソッドを使用して画像をセグメント化して抽出できます。 May 08, 2023 pm 10:55 PM

画像のセグメント化と抽出: 前景オブジェクトは、画像内のターゲット画像としてセグメント化または抽出されます。背景自体には興味がなく、分水界アルゴリズムと GrabCut アルゴリズムによって画像がセグメント化されて抽出されます。画像のセグメンテーションと抽出を実現するために分水界アルゴリズムを使用します。分水界アルゴリズムは、画像を地理的地形表面と鮮明に比較して、画像のセグメンテーションを実現します。このアルゴリズムは非常に効果的です。アルゴリズム原理 あらゆるグレースケール画像を地理的地形表面と見なすことができ、グレースケール値が高い領域は山の頂上として、グレースケール値が低い領域は谷として見ることができます。左側の画像は元の画像で、右側の画像はそれに対応する「地形面」です。このプロセスにより、画像が集水域と流域線という 2 つの異なるセットに分割されます。私たちが建設したダムは分水嶺、つまり本来のイメージです

コンピューター ビジョン アプリケーション向けの PHP での OpenCV の使用 コンピューター ビジョン アプリケーション向けの PHP での OpenCV の使用 Jun 19, 2023 pm 03:09 PM

コンピューター ビジョン (コンピューター ビジョン) は、人工知能分野の重要な分野の 1 つであり、コンピューターが画像やビデオなどの視覚信号を自動的に認識して理解し、人間とコンピューターの対話や自動制御などのアプリケーション シナリオを実現できるようにします。 OpenCV (OpenSourceComputerVisionLibrary) は、コンピューター ビジョン、機械学習、ディープ ラーニング、その他の分野で広く使用されている、人気のあるオープン ソース コンピューター ビジョン ライブラリです。この記事では使い方を紹介します

See all articles