C++の画像スムーザー
画像のグレースケールを表す2DマトリックスMがあるとすると、各ピクセルのグレースケールが周囲の8つのピクセルすべてとそれ自体の平均グレースケール(切り捨て)になるように、より滑らかに設計する必要があります。セルの周囲のセルが8つ未満の場合は、可能なすべてのピクセルを変換します。
したがって、入力が次のような場合
1 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
その場合、出力は次のようになります
0 | 0 | 0 |
0 | 0 | 0 |
0 | 0 | 0 |
これを解決するには、次の手順に従います-
-
R:=Mの行数
-
C:=の列数
-
配列を定義するd={-1、0、1}
-
サイズ(R x C)の2D配列解像度を1つ定義します
-
初期化i:=0の場合、i
-
初期化j:=0の場合、j
-
合計:=0、カウント:=0
-
初期化k:=0の場合、k <3の場合、更新(kを1増やします)、実行-
-
初期化l:=0の場合、l − 3の場合、更新(lを1増やします)、実行-
-
m:=i + d [k]、n:=j + d [l]
-
m> =0かつm
=0かつn -
カウントを1増やし、合計=合計+ M [m、n]
-
-
-
-
res [i、j]:=合計/カウント
-
-
-
解像度を返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] << ", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: vector<vector<int>> imageSmoother(vector<vector<int>>& M) { int R = M.size(); int C = M[0].size(); vector<int> d{ -1, 0, 1 }; vector<vector<int> > res(R, vector<int>(C, 0)); for (int i = 0; i < R; ++i) { for (int j = 0; j < C; ++j) { int sum = 0, count = 0; for (int k = 0; k < 3; ++k) { for (int l = 0; l < 3; ++l) { int m = i + d[k], n = j + d[l]; if (m >= 0 && m < R && n >= 0 && n < C) ++count, sum += M[m][n]; } } res[i][j] = sum / count; } } return res; } }; main(){ Solution ob; vector<vector<int>> v = {{1,1,1},{1,0,1},{1,1,1}}; print_vector(ob.imageSmoother(v)); }
入力
{{1,1,1},{1,0,1},{1,1,1}}
出力
[[0, 0, 0, ],[0, 0, 0, ],[0, 0, 0, ],]
-
C ++を使用してOpenCVでバイナリイメージを反転する方法は?
バイナリイメージを反転するとは、ピクセル値を反転することを意味します。視覚的な観点から、バイナリイメージを反転すると、白のピクセルは黒に変換され、黒のピクセルは白に変換されます。 この関数の基本的な形式は-です。 cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY); 次の行は、グレースケール画像をバイナリ画像に変換し、変換された画像を「binary_image」行列に保存しています。 threshold(grayscale_image, binary_image, 100, 255, THRESH_BINARY); ここで、
-
C ++を使用してOpenCVでバイナリイメージを作成するにはどうすればよいですか?
バイナリイメージは、白黒の2色を表す単なるデジタルイメージです。画像処理の観点から、バイナリ画像には、0と1の2つの可能な値を持つピクセルが含まれています。ピクセルの値が0の場合、それは純粋な黒色を表します。ピクセルの値が1の場合、それは純粋な白色を意味します。 グレースケール画像では、それぞれに256の異なる可能な値があります。しかし、バイナリイメージでは、可能な値は2つだけです。バイナリイメージには、さまざまなタイプのアプリケーションがあります。たとえば、形態学的変換には2値画像が必要であり、背景からのオブジェクト形状の抽出には2値画像が必要です。OpenCVを使用すると、画像を2値画像