Opencv-C++ メモ (3): Opencv ライブラリの導入と C++ での変換

1. Opencv ライブラリの概要

ここに画像の説明を挿入
calib3d には主にカメラ キャリブレーションとステレオ ビジョン機能が含まれています。オブジェクトの姿勢推定、3D 再構築、カメラ キャリブレーション
コア、データ構造、描画関数、配列操作、その他の関数
dnn、深層学習モジュールなどのライブラリの基本構造と操作を含みます。ネットワークの構築、シリアル化されたモデルのロードが含まれますが、トレーニングはサポートされていません。features2d の推論のみが可能で、
画像特徴点、特徴検出、記述マッチングなどの処理が可能
です。このモジュールは高次元近似最近傍高速検索アルゴリズムです。ライブラリには主にクラスタリングなどによる高速近似最近傍検索が含まれています。
Gapi、画像処理を高速化するためのフレームワーク、特定のアルゴリズムはありません。
highgui、画像を操作および表示するためのウィンドウを作成し、マウス イベントとキーボード コマンドを処理します。インタラクティブなビジュアル インターフェイスを提供します。 imgcodecs 画像の保存と読み取り imgproc、
画像
処理モデル、フィルタリング、ジオメトリ変換、ヒストグラム、特徴検出物体検出など。
ml、機械学習モジュール、統計的分類、回帰、クラスタリングなど
。objdetect、ターゲット検出MOOC、Haar特徴など。写真、写真モデルは、特徴点の検索とマッチング、推定を含む
画像復元、ノイズ除去ステッチング、画像ステッチングに使用されます。
選択、自動キャリブレーション、シームなど (ああ、これ)
ビデオ、動き推定のためのビデオ分析モデル、背景分離、オブジェクト追跡など
videoio、ビデオ入力、出力モジュール。

それは次のように説明されています。

キャリブ3d

実は、Calibration(キャリブレーション)と3Dを組み合わせた略称です。このモジュールは主にカメラのキャリブレーションと 3D 再構成に関連しています。基本的な多視点ジオメトリ アルゴリズム、単一ステレオ カメラのキャリブレーション、オブジェクト姿勢推定、ステレオ類似性アルゴリズム、3D 情報再構成など。

投稿する

[contrib]: Contributed/Experimental Stuf の略で、
このモジュールには最近追加されたオプション機能がいくつか含まれていますが、安定していないため、心配する必要はありません。2.4.10 のこのモジュールには、新しい顔認識、ステレオ マッチング、人工網膜モデルなどのテクノロジーが搭載されています。

OpenCVの基本データ構造 動的データ構造 描画関数 配列演算関連関数 補助関数・システム関数・OpenGLとのマクロ連携

imgproc

線形および非線形画像フィルタリング

画像の幾何学的変換

その他(その他)
画像変換
、ヒストグラム相関、
構造分析と形状記述、
動き分析と物体追跡、
特徴検出、
物体検出など。

特徴2D

[features2d]: つまり、Functions2D、2D 関数フレームワークであり、次の内容が含まれます。

特徴の検出と説明
特徴検出器 汎用インターフェース
記述子抽出器 汎用インターフェース
記述子マッチャー 汎用インターフェース 汎用
記述子マッチャー 汎用インターフェース
キーポイント描画関数とマッチング関数描画関数

青白い

[flann]: 近似最近傍高速ライブラリ
。高速近似最近傍検索とクラスタリングの 2 つの部分を含む、高次元近似最近傍高速検索アルゴリズム ライブラリです。

  [gpu]: 运用GPU加速的计算机视觉模块

ハイギ

[highgui]: つまり、メディア I/O 入出力、
ビデオ キャプチャ、画像とビデオのエンコードとデコード、グラフィカル インタラクティブ インターフェイスのインターフェイスなどを含む、高レベルの GUI グラフィカル ユーザー インターフェイスです。

遺産

モーション分析
期待値の最大化
ヒストグラム
平面サブディビジョン (C API)
特徴の検出と説明
記述子エクストラクターの汎用インターフェイス 汎用
記述子マッチャーの汎用インターフェイス
マッチャー

ミリリットル

[ml]: 機械学習、機械学習モジュール、基本的に統計モデルと分類アルゴリズム、以下の内容を含む

統計モデル
正規ベイズ分類器
K 最近傍法
サポート ベクター マシン
デシジョン ツリー ブースティング
勾配
ブースト ツリー )
ランダム ツリー
極端にランダム化されたツリー
期待値最大化
ニューラル ネットワーク
MLData

不自由な

[nonfree]: つまり、機能検出や GPU 関連のコンテンツを含む、いくつかの特許取得済みのアルゴリズム モジュールです。商用利用はしないほうがいいですよ、訴えられる可能性があります。

オブジェクトを検出する

[objdetect]: カスケード分類 (カスケード分類) および潜在 SVM を含むオブジェクト検出モジュール。

オクル

[ocl]: OpenCL で高速化されたコンピューター ビジョン、OpenCL によって高速化されたコンピューター ビジョン コンポーネント モジュール

写真

[写真]: 画像復元と画像ノイズ除去を含むコンピューテーショナル フォトグラフィー

ステッチ

[ステッチング]: 画像ステッチング、画像ステッチング モジュール。次の部分が含まれます。

パイプラインのステッチング
画像の特徴検出とマッチング
回転の推定画像スキューの
自動調整継ぎ目の推定 露出補正画像ブレンディング



スーパーレス

ts

ビデオ

このモジュールには、動き推定、背景分離、オブジェクト追跡、およびその他のビデオ処理関連コンテンツが含まれています

ビデオタブ

[Videostab]: ビデオ安定化、ビデオ安定化に関連するコンポーネント

2. C++とMATの変換方法

2.1、一次元ベクトル

 //定义一维vector
vector<float> channel_data; 

//向vector中添加元素,用push_back
for (int j = 0; j < numMic; j++){
    
    
    channel_data.push_back(*m_dataMic);
}

//求vector长度
int Len_data = vector.size(); 

//索引数据
channel_data[i]

//求vector中的最大值及位置
auto maxPosition = max_element(channel_data.begin(), channel_data.end());
cout << *maxPosition << " at the postion of " << maxPosition - channel_data.begin

2.2、二次元ベクトル

vector<vector<float>> power;  //定义二维vector
vector<float> add_power;  //定义一维vector
//std::vector<std::vector<float>> power;  //定义二维vector
//std::vector<float> add_power;  //定义一维vector
for (int i=0; i<Len1; i++)
{
    
    
    //给1维vector添加元素
    for (int j=0; j<Len2; j++)
    {
    
    
        add_power.push_back(amplite_planes1[j]);
    }
    power.push_back(add_power) //给2维vector添加元素
}

int n = power.size();       //Len1的长度
int m = power[0].size();   //Len2的长度

//求2维vector中的最大值及位置
float max_power = 0.0;
int pos[2];
for (int p = 0; p < power.size(); p++)//求2维Vector的最大值
{
    
    
	auto maxPosition = max_element(power[p].begin(), power[p].end());
	if (max_power <= *maxPosition){
    
    
		max_power = *maxPosition;
                pos[0] = p;//第几行
                pos[1] = maxPosition-power[p].begin();//第几列
	}
}

2.3 配列

//一维数据维度计算
int num=0;
num=sizeof(Array)/sizeof(Array[0]);

//二维数组维度计算
int Array[5][5];
int numberOfRow,numberOfCol,len;
numberOfCol=sizeof(Array[0])/sizeof(int);
len=sizeof(Array)/sizeof(int);
numberOfRow=len/numberOfCol;

2.4、型変換 - 1次元変換配列

vector<float> channel_data3; //定义一维vector;假定channel_data3已添加了元素
float *singleChannel_data = new float[Len];
for (int i = 0; i < Len; i++)
{
    
    
    singleChannel_data[i] = channel_data3[i];
}

2.5. 型変換 -------- 1 次元 MAT から配列へ

//转8位一维数组
uchar *array = new unsigned char[mat.rows*mat.cols];
if (mat.isContinuous())
    array = mat.data;

2.6、型変換 -------- 2次元ベクトルからマットへ

std::vector<std::vector<float>> power;  //定义二维vector

// 二维Vector转换为Mat类型的mat_power
// Create a new, _empty_ cv::Mat with the row size of OrigSamples
cv::Mat mat_power(0, power[0].size(), cv::DataType<float>::type);
for (unsigned int i = 0; i < power.size(); ++i)
{
    
    
	// Make a temporary cv::Mat row and add to NewSamples _without_ data copy
	cv::Mat Sample(1, power[0].size(), cv::DataType<float>::type, power[i].data());
	mat_power.push_back(Sample);
}

//查看二维Mat元素
power.ptr<float>(0),32 //查看第0行0-31列的32个元素

2.7. 型変換 -------- 2D Mat から Vector

//初始化二维vector维度
vector<vector<float>> R_vec;
R_vec.resize(num_row);//行
for (int c = 0; c < R_vec.size(); c++){
    
    
	R_vec[c].resize(num_col);//列
}
//R为2维Mat
for (int x = 0; x < R.rows; x++) {
    
    
	for (int y = 0; y < R.cols; y++) {
    
    
		//R_vec[x][y] = R.at<float>(x, y);
		R_vec[x][y] = R.ptr<float>(x)[y];
		//std::cout << boxPts.at<float>(x, y) << std::endl;
	}
}

おすすめ

転載: blog.csdn.net/jiyanghao19/article/details/131231866