Unknown Region

プログラムでハマったエラーとその解決方法についての備忘録メモ

【Lua】tobooleanを実装する

Luaには[tonumber]という値を数値に変換してくれる関数[tostring]という値を文字列に変換してくれる関数がデフォルトで存在する

しかし[toboolean]の様な、値を[boolean]に変換してくれる関数はデフォルトでは存在しない

[boolean]という真偽値を表す型が存在するにも関わらずだ。

(ちなみLuaでは[booleanのfalse][nil]として扱われ、それ以外の値は全てとなる)

 

無いならば作るしかない。

ということで、以下の様なコードを作成した。

例: demo.lua

#!/usr/local/bin/lua

function toboolean(value)
  if tostring(value) == 'true' then -- 文字列に変換し、文字列がtrueと一致した場合だけtrueとみなす
    return true
  end
  if tostring(value) == 'false' then -- 文字列に変換し、文字列がfalseと一致した場合だけfalseとみなす
    return false
  end
  return nil -- 変換できない場合はnil
end


print(toboolean("true"))  -- true
print(toboolean("false")) -- false
print(toboolean("hoge"))  -- nil
print(toboolean(0))       -- nil
print(toboolean(1))       -- nil
print(toboolean(nil))     -- nil

ちなみに実行結果は以下の通り。

実行結果:

$lua /demo.lua 
true
false
nil
nil
nil
nil

上記のコードには以下の改良の余地がある。

  • 値がbooleanに変換できなかった場合(このコードでは全て[nil]になる)にデフォルト値を渡せる様にするべきか
  • 渡せる値を文字列に制限するべきか(何らかの値をtostring()に渡したときの挙動によって偶然[true]や[false]に一致することは無いか)
  • 数値の1と0はbooleanに変換しなくて良いのか(上記コードではどちらも[nil]になる)

個人的には用途に応じて要求される振る舞いが変わると思っているので、使おうとするときに随時考える必要がある気がする。

 

【Python】カメラなどで撮影したノイズ混じりの線画を綺麗な白黒に加工する【OpenCV】

本当は別で動画加工をするためにプログラムを作成していたのだが、たまたま別の用途に使用できそうな副産物のプログラムが出来上がったので備忘録として残す。

カメラで撮影した様なノイズ混じりの線画を、パソコン上で彩色しやすい様にはっきりとした白黒に変換するためのプログラムを作成した。

ちなみに使用するのはOpenCVなので「opencv-python」をpipなどでインストールして使える状態にする必要がある。

pip install opencv-python

 

ちなみにOpenCVというのは画像処理や画像解析のためのライブラリ。

今回はこれのバージョン4.X系を使用する。

(4.Xとそれ以前では、引数や戻り値などに違いがあるので注意)

opencv.org

例: demo.py

#!/usr/bin/python

import cv2

# 画像の読み込み
image = cv2.imread('target.jpg')

# グレースケールに変換
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 閾値で色のついている部分だけを抽出
_, dist = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)

# 画像の吐き出し
cv2.imwrite("result.jpg", dist)

変換後の画像は白と黒の二色しかない画像となる。

 

例:元画像(target.jpg)

f:id:PlugOut:20200101021417j:plain

例:結果画像(result.jpg)

f:id:PlugOut:20200101021417j:plain

ちなみにこの時点ノイズの除去は完璧ではない。

「モルフォロジー変換」を使ってうまいこと除去できれば良いのだが、カーネルの指定が恐らくは画像によって調整する必要があるのがちょっと難しい。

opencv.jp

記事のタイトルを「塗り絵を作成する」にすればよかった

 

連絡先: plugout777★yahoo.co.jp (クローラー対策のため★を@に変更してください)