日々是好日

プログラミングについてのあれこれ、ムダ知識など

OpenCV for AndroidでJPGから透過付きBitmapを生成するときのメモ

前後のつながりも何もないメモ。

Imgproc.cvtColorでグレースケールを生成するとき、引数にはImgproc.COLOR_RGBA2GRAYを設定すること。 Imgproc.COLOR_BGRA2GRAYを選択すると、後でsrcMat.copyTo(dstMat, mask)でマスクするときに背景の透過がうまく行われない。 (黒に置換される?)

これで3日くらい溶かした。

OpenCV for Androidで手書き文字をクロッピングする

概要

  • 写真をOpenCVで二値化して、手書き部分のみクロッピングする
  • Bitmapをアルファ付きPNGとして保存するとき、Bitmap#setHasAlphaをセットしないとアルファ値が捨てられる
    • 読み込んだときに背景が黒に置換される模様

動きとしてはこんな感じ。

f:id:kcpoipoi:20201101124152g:plain

  • 概要
  • OpenCV for Androidの導入
  • OpenCVの初期化
  • PNGをBitmapとして取り込む
  • 画像処理テスト用にクラスを作成する
    • MainActivityからの呼び出し
    • ファイルの入出力クラスの作成
  • 二値化の方法について
  • 調べたものリスト
    • Bitmapの保存について
    • BitmapのPixel操作を扱ったもの
    • OpenCVの反転処理を扱ったもの
    • OpenCVで透過処理を扱ったもの
    • OpenCVのMatクラスについて
    • findContours等、輪郭を扱ったもの
    • 平滑化処理を扱ったもの
    • 膨張・収縮処理(Dilation/Elosion)
    • OpenCVリファレンス
    • Core.splitとかmergeとかやってるけど全然分からなかったもの
    • 関係ないけど画像の暗黙的Intentについて
    • OpenCV for Androidのインストール
    • Android単体で画像の切り抜き
続きを読む

Android Studio 4.1 にOpenCV 4.5.0 をインポートするメモ

Android Studioのバージョン更新のためか、Qiitaや個人ブログの方法がそのままでは使えなかったのでメモ。

大筋は下記参照でいいと思うのでポイントだけ。
(まだインポートまでしかやってないけど←)

qiita.com

環境

現象

  • Import Module from SourceダイアログにModule nameが無い
  • デフォルトではモジュール名がsdkとなるが、opencv等任意の名前に書き換える場合はsettings.gradleも修正する必要あり

ぱっとモジュール名を変更すると、Project Structureからモジュールの依存関係を追加するときにモジュールが見つからなくなるという地味なトラップがあった。

対応

File -> New -> Import Module
で表示されるダイアログには、Source directoryはあるがModule nameは無くなっている。

⇒インポート後に、手動でモジュール名とsettings.gradleを修正する

OpenCVをインポートするとき、指定するフォルダがsdkとなっているため、 Android Studioにインポート後もsdkという名前になっている。

任意の名前に書き換えるときはsettings.gradleを修正する必要がある。

include ':app'
- include ':sdk'
+ include ':opencv' // ← モジュール名がsdkでインポートされるため、任意の名前に書き換え
rootProject.name = "OpenCVSample"

とりあえずここまで。あとテストしてハマったら随時追記する。

Mockito+kotlin-allopenプラグインでモックする

Kotlinでテストを書く場合、kotlin-allopenプラグインを使うと簡単にモックできるということですが、ネットに転がってる情報が思いのほか不親切だった(他責)ので個人的まとめ。

  • 結論
  • kotlin-allopenとは
  • リリースビルドではどうするのよ
  • mock-maker-inlineは?
続きを読む

Androidアプリのアップロード鍵.keystoreの作成と管理について

Androidの署名ファイル(keystore)について個人的まとめ。

今のところ一番腑に落ちる配置の仕方かな?

  • keystoreとは
  • 環境
  • 手順
    • /Users/user/.gradle/gradle.propertiesにパスを記述する
    • .gradle/.signingフォルダを作る
    • keystoreファイルを生成する
    • keystoreを.signing/YourProjectNameに移動する
    • パスワードをprojectname.propertiesに記述する
    • build.gradleに署名付きビルドのためのコードを記述する
    • ビルドバリアントをreleaseにしてビルド
  • 参考
続きを読む

Pandoc+Dockerでドキュメント作成環境を整備する

Pandoc、MarkdownからHTMLでもPDFでも、Wordにだって出力できて便利ですね。

軽い気持ちでPandocを導入しようとしたら地獄を見たのでその備忘録です。

なお、筆者の環境は Windows10 Pro + Docker for Windows で構築しています。 Linux歴3週間程度のため、コマンドの打ち方等は未熟な部分がありますのでご容赦ください。

2020/7/27 17:00 更新 HTMLの見出しの採番用Luaフィルタを追加

github.com

リポジトリを作成しました。

  • 目的
  • 概要
  • 手順
    • Docker (Docker for Windows)をインストールする
    • pandoc/latexイメージを導入する
    • LuaTeXパッケージ等導入する
    • 図表対応のため pandoc-crossref を導入する
    • easy-pandoc-templatesを導入する
    • Dockerfileを作成する
    • 長いオプションをDefault fileにまとめる
    • 補足:採番の接頭辞・接尾辞の修正
      • PDF出力の場合
      • HTML出力の場合(easy-pandoc-templates使用を前提)
  • 参考にさせていただいたサイト
続きを読む

vue serve コマンドとカスタムパーサ設定の話

vue serve <vue file>が便利そうだったので使いたいと思ったら、思いのほかトラップがあったのでメモ。

.eslintrc.jsにおいてカスタムパーサを指定するのがキモだった模様。

実際何が必須で何が不要なのかわかってないので後で調べる。

手順

まず最初にnpm install -g @vue/cli @vue/cli-service-globalをインストールしておく。

このままvue serve <vue file>をやっても、おそらくCannot find module 'babel-eslint'とエラーを吐いてしまう。

babel-eslintパッケージがインストールされてないのは分かる。 一方で、ESLintをローカルのままでserveしたい場合が出てこなかった。

ESLintをローカルのままでserveしたい場合、次のようにする。

①最初にnpm i --save-dev eslint babel-eslintでローカルにインストールする。

package.jsondevDependenciesに次のとおり記載されていればOK(だと思う)。

// package.json
// `vue create`で最初から導入されているパッケージも含む
"devDependencies": {
    "@typescript-eslint/eslint-plugin": "^2.33.0",
    "@typescript-eslint/parser": "^2.33.0",
    "@vue/cli-plugin-babel": "~4.4.0",
    "@vue/cli-plugin-eslint": "~4.4.0",
    "@vue/cli-plugin-typescript": "~4.4.0",
    "@vue/cli-service": "~4.4.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^6.2.2",
    "typescript": "~3.9.3",
  }

.eslintrc.jsに次のとおり追記する

// .eslintrc.js
module.exports = {
  root: true,
  env: {
    node: true
  },
  'extends': [
    'plugin:vue/essential',
    'eslint:recommended',
    '@vue/typescript/recommended'
  ],
  parser: "vue-eslint-parser",  // ←追記
  parserOptions: {
    parser: "@typescript-eslint/parser",  // ←追記
    ecmaVersion: 2020
  },
  ...

vue serve <vue file>でローカル鯖起動できればOK

あとで調べる

カスタムパーサ #とは

参考

cli.vuejs.org

igatea.hatenablog.com

github.com

qiita.com

eslint.vuejs.org