OpenCVの各種機能(1)
5577 ワード
imread()-COLOR=RGB読み出し
imread()-GraYSCALE=階調として読み込む
imread()-innovation=ファイル属性で読み込む
を選択します.
出力値3がカラー画像であり、2が階調画像であることをshapeで認識する.
ピクセルにアクセスし、そのピクセルの値を変更します.
作成/コピー
プロジェクトに適用される長方形の描画を見てみましょう.
rectangle(img, pt1, pt2, color, thickness, lineType, shift)
rectangle(img, rec, color, thickness, lineType, shift)
関数は次のとおりです.img(長方形を描く位置)、pt 1(基点1)、pt 2(基点2)、color(長方形を描く直線の色)、直線のタイプ(デフォルトLINE 8、LINE 4など)、座標値を描くスケールのデフォルト値は0
LINE 4とLINE 8は、隣接する画素を4方向の1つに塗りつぶすか、8方向の1つに塗りつぶすかを決める.
例
binding.canvas.setOnTouchListener { v, event ->
when (event.action) {
MotionEvent.ACTION_DOWN -> {
initX = event.x
initY = event.y
}
MotionEvent.ACTION_MOVE -> {
mat = Mat.zeros(
binding.canvas.measuredHeight,
binding.canvas.measuredWidth,
CvType.CV_8UC3
)
when (binding.radioGroup.checkedRadioButtonId) {
R.id.line -> {
Imgproc.line(
mat,
Point(initX.toDouble(), initY.toDouble()),
Point(event.x.toDouble(), event.y.toDouble()),
Scalar(255.0, 0.0, 0.0)
)
}
R.id.rectangle -> {
Imgproc.rectangle(
mat,
Point(initX.toDouble(), initY.toDouble()),
Point(event.x.toDouble(), event.y.toDouble()),
Scalar(255.0, 0.0, 0.0)
)
}
R.id.circle -> {
val absX = abs(initX - event.x)
val absY = abs(initY - event.y)
Imgproc.circle(
mat,
Point(initX.toDouble(), initY.toDouble()),
sqrt(absX * absX + absY * absY).toInt(),
Scalar(255.0, 0.0, 0.0)
)
}
}
val bmp = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(mat, bmp)
binding.canvas.setImageBitmap(bmp)
}
}
true
}
明るくするときはadd()、暗くするときはsub()を使い、簡単に変換できます.
単純な例
private fun calcBrightness(src: Mat, additionalBrightness: Int): Mat {
// 밝기를 스칼라값으로 치환
val src2 = Scalar.all(additionalBrightness.toDouble())
val dst = Mat()
Core.add(src, src2, dst)
return dst
}
これは、画像をぼやけ、鋭く、明瞭にし、ノイズを除去するのに役立ちます.
blur()
既定では、画像をぼかします.
眼鏡をかけているような感じがします
GaussianBlur()
blurと同様に、ブラー効果もありますが、blurとは異なります.
GaussianBlurは全体密度が同じノイズと白色ノイズを効果的に除去できる.
medianBlur()
ノイズ除去に使用します.
bilateralFilter()
これまでの処理では境界がぼやけ、二重フィルタでは境界が維持されます.
結果を見るとメイクをしているような気がします
resize()
たいしょう
flip()
移動
warpAffine()
回転
getRotation()
warpAffine()
境界を検出するには、ピクセル値の変化が急激でなければなりません.
境界値は、連続画素値を微分演算することによって検出される.
画像中の画素データは離散的で不連続であり,近似値で計算した.
numpy
x軸方向微分gx
y軸方向微分y
その欠点は速度が速いが,ノイズに敏感でエッジ強度が低いことである.
相対対角線検出能力が弱いPrewittフィルタに対してSobelは水平、垂直、対角線検出能力が強い.
水平、垂直、対角線の検出能力が強い.
y:2 Dベクトルのy座標行列(実型)
magnigude:xサイズやデータ型などの2 Dベクトルのサイズマトリクス
「Sobel」(Sobel)フィルタを使用してグラデーション方向
非最大値抑制勾配方向のみ検出最大値
Theresholdingを使用して境界値(最小、最大)を指定することで境界を指定します.
トップしきい値
下のしきい値
Reference
この問題について(OpenCVの各種機能(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@jsw4215/OpenCV의-다양한-기능1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol