VS2017 + OpenCVのは、ガールフレンドのように塗装すること???? !!!!!!

簡単な紹介

写真のモンタージュは、一般的にモザイクマップと呼ばれます。図多くの小さなは、より大きな画像にスプライス。商用宣伝の後、だけでなく、彼らの宣伝が一般的な方法多くのパートナーとすることができる促進します。OpenCVのチュートリアルショーはモザイクマップの生産を完了するために使用します。次のような効果があります
ここに画像を挿入説明

前提の準備

  1. VS2017インストール、チュートリアル:vs2017インストールガイド
  2. OPENCV3.4.1のインストール、チュートリアル:vs2017インストールOpenCVのチュートリアル
  3. 絵やモザイク画の束のターゲットを準備します。

思考

  1. これらは、写真の束の大きさは、モザイクのような大きさに予め準備された変更します。
  2. 各画像の平均色を算出します。
  3. その長さの整数倍にするために、対象画像の長さと幅を変更し、モザイクの大きさは幅です。
  4. モザイクサイズの単位は、対象ピクチャにも領域の平均色を算出し、その後対象ピクチャとの間の差を比較することにより、モザイク画像の交換の平均事前準備は、最も近い平均値に置き換えるを横切ります。
  5. 良い絵との完全な交換との融合物として最も客観絵を準備し始め、効果がより現実的です。

コード分​​析

コードを考えます:

ここに画像を挿入説明
この部分は、主に置換画像のサイズを変更するために使用され、各画像の平均色を算出し、Iはパスとしてキー、スロット値として平均値を使用して、クラスマップを定義し、後部分の代替画像であります準備

第二のコードを考えます:

ここに画像を挿入説明
これは、平均色源の計算であります

コード3つのアイデア:

ここに画像を挿入説明
ここに画像を挿入説明
ターゲットのサイズの画像を描画することは、彼が行わモザイク地図の整数で置き換えられてもよいように、小さな変化となります。
図IIは、ソース画像ベースマットのサイズの変形例であり、XYパラメータはポイント幅、右画像の高さのサイズで撮影された入力画像(X、Y)に基づいています。

コード4つのアイデア:

for (int i = 0; i < src.rows / height; i++)
	{
		for (int j = 0; j < src.cols / width; j++)
		{
			static int n = 0;
			float error = 0;
			float lasterror = 10000000;
			string path = "";
			Mat tempPieces = spliteTest(src, j * width, i * height, width, height);
			float ave = cal_mean_stddev(tempPieces);
			map<int, string>::iterator strmap_iter = strMap.begin();
			for (; strmap_iter != strMap.end(); strmap_iter++)
			{
				if (fabsf(ave - strmap_iter->first) < 1)
				{
					path = strmap_iter->second;
					break;
				}


				error = fabsf(ave - strmap_iter->first);
				if (error < lasterror)
				{
					lasterror = error;
					path = strmap_iter->second;
				}
				//cout << strmap_iter->first << ' ' << strmap_iter->second << endl;
			}
			Mat tempimg = imread(path);
			mergeTest(src, tempimg, j * width, i * height, width, height);
		}
	}

これは、全体のターゲットマップを横断モザイクサイズ単位で、単純なアルゴリズムの一部であり、各部分の平均色を算出し、次いで置き換えて同様の平均色を取る鍵を格納された我々の以前のクラスマップと比較します。

コード5つのアイデア:

ここに画像を挿入説明
元の画像マップの最後に、結果と融合を行う、そのような目的は、時には我々は、画像の数を交換する準備ができているが小さすぎるか、私たちはマップよりも得失点差で準備されたレンダリングされないように、いくつかの色を引き起こす可能性があまりにも単色、ということです大規模な。アルファおよびベータとの融合は、スケーリング係数を乗じたマット3チャネル行列にこれらの2つの係数の比です。BaiduのaddWeightedの具体的な原理は、ソースとして機能することができます。

エンジニアリング命令

我々はプロジェクト全体のソースを用意して**最後に、以下の簡単な説明を行います。
ここに画像を挿入説明
私たちはすることができ、コードの内容の下に設定する必要があります。
ここではない、あまりにも多くの説明、私は、ファイルのパスを調べることができます。
ここに画像を挿入説明
ここに画像を挿入説明

業績

オリジナル(テイクガールフレンドはHHHHHそれをカット):
ここに画像を挿入説明
レンダリングイメージの融合を追加しないでください。

ここに画像を挿入説明
画像融合プラスレンダリング:
ここに画像を挿入説明

プロジェクトアドレス

リンクします。http://t.cn/Ais8oaxV抽出コード:vs2017と4hqm使用前にOpenCVのインストールを持っています。、プロジェクト対slnファイルを開くにはダブルクリックして、それの一部内部初期化コードを変更するには、プロンプトに応じて

概要

実際には、かなり良いアイデア、そして書き込みがあります。最も曲がりくねったプロセスはCOLと行マットクラスです。彼らは絵を越えての長さと幅を横断したときに、行と列は、私が務めた、言うことはできませんし、異常のすべての種類は、これはそれの魅力対かもしれません。
〜それを楽しみます

公開された53元の記事 ウォンの賞賛5 ビュー2210

おすすめ

転載: blog.csdn.net/qq_37668436/article/details/103980091