Python

8bitビットマップ(bmp)ファイルを1bit深度で2値化する

ee9king に投稿

OpenCVで2値化すると、8bit深度データのまま(0/255)で保存される。1bit深度で保存するにはPILを使うしかないようだ。

白(255)以外のデータはすべて黒(0)とする、これは下記で実現できた(pointの中の構文は実はあまりよくわかってない)

from PIL import Image
import os
fname = "../../Desktop/AB.bmp";
a=Image.open(fname);
b=a.convert("L");
c=b.point(lambda x: 255 if x >= 254 else 0);
sname = os.path.splitext(fname)[0]+"-bit1.bmp";
c.convert("1").save(sname);

読み込み後、最初にグレースケールにしてあげる必要がある

MicroPythonとnumpy

ee9king に投稿

Pythonつかうなら、Numpy?数値の演算や配列などでPythonで書く時、必ずこれを書く

import numpy as np

MicroPythonでもできるんでしょ?的な感じだったが、ググって読んでも読んでも難解・・コンピアルするとかビルドするとか、Linuxでとか書いてある。だから、Pythonこういうのが嫌いなんだけど。

最終的に、ビルド済みリリース版がここにあった。。picoもどきには、RPI_PICO.uf2を入れてみたらよかったようだ。これは、前回MicroPythonを入れる時に誘導されたファイルが RPI_PICO-20240222-v1.22.2.uf2 だったから、きっとこれだろうということだったわけだが、正解の模様

https://github.com/v923z/micropython-builder/releases

ラズパイPicoもどき

ee9king に投稿

ElecrowのページでMicroPythonと記載があって安価だったので、買ってみた。YD-RP2040と書かれていてVCC-GND.COMとか、なにそれ。Picoと違うところは、WS8212が載っているところ?、Pico持っているわけではないし、ラズパイというものを使っているわけではないので、実はあまりよく知らない。安かったというのが一番の理由か

MicroPython

Macでシリアル通信

ee9king に投稿

MacOSでシリアル通信したくなる。実際、マイコンボードなどを使ってプログラムをドロップすると勝手にリセットして接続が切られるため、勝手に外されたというエラーが表示され気持ちが悪い、またそのダイアログは消さないと自動で消えてくれないので、使い勝手は良くない。しかし、シリアル通信データを取得したいという要求は少なからずある。

terminal(ターミナル)を起動し、デバイスを見つける。

$ ls -l /dev/tty.*
crw-rw-rw-  1 root  wheel  0x13000000  3  2 20:53 /dev/tty.BLTH
crw-rw-rw-  1 root  wheel  0x13000002  3  2 22:25 /dev/tty.Bluetooth-Incoming-Port
crw-rw-rw-  1 root  wheel  0x13000004  3 20 18:55 /dev/tty.usbmodem14201

このusbmodemなんちゃらが接続されたマイコンボードである。これに対して、"cu"コマンドで接続すればいいようだ。

またspyderが起動しなくなった(Mac)

ee9king に投稿

ちょっとしばらくいじってなくて、OSアップデートもあったけど、またAnacondaからSpyderが起動しなくなった。一度目は起動したが、Terminalで

conda update conda

をやったところ、それ以降起動しなくなった。。Anacondaプロンプトにエラーが出される(****はMacのユーザー名)

2値のBMPモノクロ画像を作成する

ee9king に投稿

あることで、2値画像を作る必要があった。ここで言う2値画像とは、白黒のbmpファイルで、bit深さが1のものである。

openCVでbmpファイルを2値で保存すると、値が0と255だけになった絵になり見た目はできているが、これだと、後処理で使いにくかった。1と0の2つの値からなる、1bit=1画素のbmpファイルにしたい。

どうも、openCVのsaveではそれはできなさそうだった。pillowライブラリを使うと可能。

S11のピークを見つける

ee9king に投稿

いまひとつ、うまくやりたいことに到達しないんですがそれは自己の「ボキャブラリのなさ」ということなんでしょう、きっと

ピークを見つけるのに、scipyを利用する方法があるようです。前も調べたことがあるのだが、わかりにくいなぁ。低いピーク(谷)を見つけるのにargrelmin 、山を見つけるのに argrelmax 。引数のorderは、検出する範囲を指定するみたい。しかし、sパラのデータはログで掃引しているので下の方と上の方とでピークの位置をきちっと判定できない。ログでも判定できたらいいのにね、でもどういうアルゴリズムになるのか想像できないですけどね。

scikit-rfのデータを抽出する

ee9king に投稿

s_magなどデータプロットは綺麗にできるようになったが、データをCSVなんかで保存できないかということを考えていた。Spyderで変数エクスプローラを見ると構造体の中にデータが入っているように見えて、そこを選択してエクセルとか貼り付けることはやっていた。

fが周波数、sが3D配列で見えていると思われる。