疑似カラー変換とは
モノクロの画像を画素の濃淡で色を当てはめてカラーにする変換する処理
カラーの画像をモノクロ画像に変換するなどして使うと写真の加工フィルターとしても使えます
イメージとしてはこちらのサイトのグレースケールと色の関係を示すカラーバーがわかりやすいかもしれません
http://home.u08.itscom.net/makoigkn/pseudo_color.html
実装
AndroidへのOpenCVの入れ方については省略
下記がコードになります。
// BitmapをMatに変換
val mat = Mat()
Utils.bitmapToMat(bitmap, mat) // 対象となるbitmapを入力
// グレースケールに変換
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_BGR2GRAY)
// 疑似カラー変換
val colorMap = Mat()
Imgproc.applyColorMap(mat, colorMap, Imgproc.COLORMAP_JET)
// MatをBitmapに変換
val pseudoColorBitmap = Bitmap.createBitmap(colorMap.cols(), colorMap.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(colorMap, pseudoColorBitmap)
// ImageViewに表示
val imageView: ImageView = findViewById(R.id.imageView)
imageView.setImageBitmap(pseudoColorBitmap)
疑似カラー変換のために、まずはグレースケールに変換
グレースケールとなった画像をImgproc.applyColorMapにて疑似カラー変換
第三引数には適用したいカラーマップを指定する、サンプルとしてCOLORMAP_JETを指定
Imgproc.applyColorMapには以下のふたつの関数があり
public static void applyColorMap(Mat src, Mat dst, int colormap)
public static void applyColorMap(Mat src, Mat dst, Mat userColor)
上はあらかじめ用意されたカラーマップを指定
下は自分で用意したカラーマップを使用することができる(Matで作成)
公式よりカラーマップタイプが確認できる(22種類ある)
https://docs.opencv.org/4.x/d3/d50/group__imgproc__colormap.html
サンプルとして何種類かのカラーマップタイプで変換した画像を掲載
終わり
OpenCVを用いることで簡単に画像処理をすることができる
カメラから入力した画像をそのまま変換などしても面白いかもしれない