【OpenCV】 照明ムラがある環境での二値化
照明ムラがある環境下で二値化を行い対象物を抽出しようとする場合、普通に二値化処理を行うと大抵上手く抽出できません。 下の画像はその例で、画像上部が明るめ、画像下部が暗めのになっています。この画像から米粒を抜き出そうとして大津の方法を適用すると、照明ムラの影響を受けて上手く抽出できていないことが分かります。 このような時の対処法の例がMathWorksのホームページに掲載されており、今回はOpenCVで実装します。
// 画像をグレースケールで読み込む Mat gray; imread("non_uniform_illumination_example.png", IMREAD_GRAYSCALE).copyTo(gray); if (gray.empty()) { throw runtime_error("Failed to open image"); } // オープニングを実行して背景を取り出す Mat element = getStructuringElement(MORPH_ELLIPSE, cv::Size(15, 15)); Mat background; morphologyEx(gray, background, CV_MOP_OPEN, element); // 前景を取得する Mat foreground; absdiff(gray, background, foreground); // 二値化して米粒を抽出する Mat binary; threshold(foreground, binary, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
元画像 背景 前景 米粒
【料理】 鶏肉のカリカリ焼き・ネギ塩レモンソース
たまに料理を作るのですが、また作る事があるかもしれないのでメモしておきます。
材料(2人分)
鶏もも肉 2枚 ⇒ 1枚(350~400g、小食なので二枚は多い)
ネギ 1本
ごま油 大さじ2
塩 小さじ1/2
こしょう 適量
レモン汁 大さじ1 ⇒ 大さじ0.7位(酸っぱいと感じた)
1. フライパンを温めて、皮を下にして鶏もも肉を焼く
- アルミホイルをひいた上から水を入れた小さい鍋を使って肉を押さえ付けるとカリカリになった
- 7~10分焼いたと思う
2. 反対側を焼く
3. ネギ塩だれを作る
- ネギをみじん切りにする
- ごま油、塩、レモン汁を入れる
- フライパンに入れ、中火でネギを少し炒める
4. 鶏肉を食べやすい大きさに切る
【OpenCV】 forループを使わずに指定した色を別の色に変更する
ディープラーニングの前処理として、画像のある色を別の色に変更しようとしていました。ただ、NumPyではforループをなるべく使用しないことが推奨されているため、どうやって実現すれば良いのか悩んでいましたが、ここ(Replace a range of colors with a specific color in python - OpenCV Q&A Forum)にアドバイスがありました。
import cv2 import numpy as np image = cv2.imread('lenna.jpg') # 画像の黒い部分を白に置き換える black = [0, 0, 0] white = [255, 255, 255] image[np.where((image == black).all(axis=2))] = white
【Python】 行列積の演算子
行列積はNumPyのdotメソッドを利用しますが、Python3.5/NumPy1.10からは@演算子でも行列積を表現できると知ったのでメモします。
import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) # a_dot_bとa_at_bは同じ結果になります a_dot_b = np.dot(A, B) a_at_b = A@B
科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化
- 作者: 中久喜健司
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
【Python】 csv数値データファイルの読み書き
csv数値データファイルの読み書きはnumpyを使うと簡単にできます。
import numpy as np # csvファイルの読み込み(ヘッダがある場合はskiprowsを1にする) data = np.loadtxt('file.csv', delimiter=',', skiprows=0) # csvファイルへの書き込み(%0.2fで小数点以下の桁数を指定している) np.savetxt('file.csv', data, fmt='%0.2f')
科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化
- 作者: 中久喜健司
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
【OpenCV】 バイラテラルフィルタの引数について
輪郭をぼかさずにノイズを除去する方法としてバイラテラルフィルタを紹介されたのですが、今一つパラメータの意味が理解できていませんでした。
void bilateralFilter(const Mat& src, Mat& dst, int d, double sigmaColor, // 何これ? double sigmaSpace, // 何これ? int borderType=BORDER_DEFAULT)
幸いこのフィルタについて分かりやすく説明してくれているサイトがあったのでメモしておきます。 imagingsolution.net
サイトと対比させると、sigmaColorはに相当するパラメータで、大きくし過ぎるとガウシアンフィルタと何も変わらなくなるため注意が必要なパラメータ、sigmaSpaceはに相当するパラメータになると思います。
【Python】 "Deep Learning Prerequisites: The Numpy Stack in Python" Lecture13のメモ
udemyで無料オンラインコースがいくつかあるのですが、Numpyの無料講座を受講中です。その中で知らなかった事をメモしておきます。
レクチャー13からPandasの話になるのですが、Pandasは使えた方が良いのでしょうか。。。今のところ特に困っておらず(困っていることに気付いていないだけかもしれません)、モチベーションは薄いですが講義受けます。
1. Pandasを使ってcsvファイルを読み込む
import pandas as pd data = pd.read_csv('csv_example.csv')
2. 読み込んだデータはinfoやheadで内容を確認できる
import pandas as pd data = pd.read_csv('csv_example.csv') # 読み込んだデータの表示 data.info # 指定した行数データを表示する(先頭5行を表示) data.head(5)