mieki256's diary



2026/03/25(水) [n年前の日記]

#1 [gmic] G'MIC CLIについて勉強中。その2

コマンドラインで画像フィルタ処理ができる、G'MIC CLI (gmic.exe) について勉強中。環境は Windows11 x64 25H2 + G'MIC CLI 3.7.4 (内部バージョンは3.7.3のまま。たぶんバグだろう…)。

デフォルトパラメータの指定 :

gmic のフィルタの中には、引数が要らないものと、引数が必要なものがある。

以下は引数が不要な例。グレースケール化フィルタを使ってる。
gmic sp lena to_gray o -.png | py view_stdin.py

引数が必要な場合は以下のような記述になる。
gmic sp lena glow 16 o -.png | py view_stdin.py
gmic sp lena boxfitting 2,16,0.25,1 o -.png | py view_stdin.py

ただ、引数が必要なフィルタは、えてしてデフォルト値を持っている。デフォルトパラメータを指定したい時は「,」を記述すればいいらしい。
gmic sp lena glow , o -.png | py view_stdin.py
gmic sp lena boxfitting , o -.png | py view_stdin.py

gmic parse_cliが動かない :

チュートリアル記事には、以下を打てば apply という文字列を含んだコマンドの一覧が表示されるとあるのだけど。

_Start Here

gmic parse_cli print,apply

試してみても何も出てこなくて悩んでしまった。環境は Windows11 x64 25H2 + gmic 3.7.4 / Ubuntu Linux 22.04 LTS + gmic 2.9.4。


以下を打ったら状況が変わった。
> gmic update

[gmic]./ Start G'MIC interpreter (v.3.7.3).
[gmic]./ Update command definition file 'C:\Users\USERNAME\AppData\Roaming\gmic\update373.gmic' from the G'MIC server.
[gmic]./ End G'MIC interpreter.

おそらくだけど、ネット上から update373.gmic を入手して所定の場所に置かれたように見える。

この後、以下を打ったらチュートリアル記事にあったように表示されるようになった。
> gmic parse_cli print,apply

[gmic]./ Start G'MIC interpreter (v.3.7.3).
[gmic]./ Parse '#@cli' command(s) 'apply' and output in 'print' mode.
apply_camera3d
apply_camera
...
apply_video
[gmic]./ End G'MIC interpreter.

C:\Users\USERNAME\AppData\Roaming\gmic\ を眺めてみると、update351.gmic だの update373.gmic が入っていた。数字部分はおそらく gmic のバージョン番号だろう…。gmic parse_cli は update???.gmic を読み取って、その中に記述されてるコマンドについて表示する仕様なのかもしれない。

とにかく、gmic CLI をインストールしたら gmic update を打っておけ、ということかな…。

ただ、Ubuntu Linux 22.04 LTS + gmic 2.9.4 で gmic update と打っても、gmic parse_cli print,apply の結果は変わらなかった。Windows版限定なのか、それとも gmic 3.x なら効果があるのか…。


余談。Ubuntu Linux 20.04 LTS上で gmic をインストールしたら 2.4.5 だった。gmic 2.4.5 の時点では parse_cli というコマンドは実装されてないように見えた。

余談その2。件のフォルダの中には、ここ最近使用したサンプル画像も入ってた。gmic sample lena 等でサンプル画像を使おうとすると、ネットからダウンロードして件のフォルダに置かれるということかも…。最初から内蔵してるわけじゃなさそうだな…。たぶん。

#2 [nitijyou] 洗面所の掃除用に歯ブラシを購入

Seriaヨークベニマル須賀川西店で、洗面所の掃除用に歯ブラシを購入。


歯ブラシは洗面所の掃除に使う予定。親父さんが入れ歯を洗面所で洗うたびにポリグリップ的なものを排水溝にそのまま流して詰まってしまうので、家族が歯ブラシの類で排水溝周りを掃除しないといけないのだけど。一度使ったら歯ブラシの毛がポリグリップだらけでベタベタになるから捨てるしかなく。使い古しの歯ブラシの在庫が全部無くなってしまった。新品でもったいないけど仕方ない…。

カーテンクリップは、ネズミ捕りの餌を仕掛けるのに使えないかと…。今まで干し芋(さつまいも)を糸で縛ってつけてたけど、手がベタベタになるので悩んでいて…。これならバチンと挟むだけで済むんじゃないか。済むといいな…。

#3 [nitijyou] 日記をアップロード

2026/02/28を最後に日記をアップロードしてなかったのでアップロードしておいた。

2026/03/24(火) [n年前の日記]

#1 [cg_tools] ImageMagickのdisplayのWindows版は無いのだろうか

アレコレ実験しているうちに、標準入力から画像データを受け取って表示するツールは無いのかなと思えてきた。Linux環境であれば ImageMagick の display を使えるのだろうけど、Windows上ではどうすれば…。

Windows版の ImageMagick には display は無いらしい。その代わり、昔は imdisplay というツールが付属していた。ただ、最近の ImageMagick ではサポートされなくなって、同梱されなくなった。

_ImageMagick/IMDisplay
_IM Display missing in Windows - ImageMagick/ImageMagick - Discussion #7399
_Shortcut "ImageMagick Display" is pointing to old version - 7.1.1.29 - Issue #7246 - ImageMagick/ImageMagick
_How to pipe an image to imdisplay (on Windows)? - ImageMagick/ImageMagick - Discussion #2164
_Windows installation win: and show: don't work - Issue #7609 - ImageMagick/ImageMagick
_WriteBlob Failed 'win:.' Can't figure out why. - Issue #667 - emcconville/wand

そもそも imdisplay は標準入力から画像データを受け取ることができない、という話も出ているようで…。

また、以前は代わりに「win:」なる指定を使うこともできていたらしいけれど、それも最近はサポートされなくなったようで…。

ImageGlassがお勧めされている模様 :

ImageMagick のメンテナさんは「代わりに ImageGlass を使え」「内部で ImageMagick が使われているから imdisplay と似たようなもの」と言及しているけれど、その ImageGlass も標準入力から画像データを受け取って表示する機能は無いっぽいのだよな…。

_ImageGlass - A lightweight, versatile image viewer

ただ、ImageGlass には、開いてる画像が更新されたら自動で表示更新する機能があるので、処理結果の画像ファイル名を同じ名前にして ImageGlass で開いておけば、実験中に結果画像を確認できる。

まあ、標準入力/標準出力を利用して画像処理の実験をする機会自体が少ないだろうし…。そういうツールが無くてもフツーは困らないのだろうな…。

#2 [gmic][imagemagick] gmicとImageMagickを繋げる

コマンドラインで画像処理ができるツール、ImageMagick の convert (magick convert) も、標準入力や標準出力を利用することができるらしい。

下記の例では、convert が標準入力から受け取った画像データにガウシアンぼかしをかけて標準出力に送っている。
cat input.png | convert - -gaussian-blur 10x10 - | py view_stdin.py


ベタデータを扱う際は、.raw の指定が使える模様。ただ、ベタデータは、画像サイズ、チャンネル毎の深さ、チャンネル数(RGB/RGBA)の情報を持っていないので、それらは別途指定しないといけない。
convert lena.png rgb:-.raw | convert -depth 8 -size 512x512 rgb:-.raw out.png

gmicとの連携 :

gmic と組み合わせてみたけれど…。

gmic sp tiger o -.raw | convert -depth 8 -size 750x500 rgb:- out.png

変な画像になってしまった。RGBチャンネルが順に並んだ白黒画像になっているように見える。

gmic と ImageMagick は .raw の画像データの並びが違っていて、そのせいで gmic の出力結果を ImageMagick側で正しく処理できないらしい。
  • gmicは、RRRRRR,GGGGGG,BBBBBB の並びになっている。
  • ImageMagick は、RGB,RGB,RGB,RGB... の並びになっている。

gmic 側に permute cxyz を指定することで、ImageMagick 側と同様のデータの並びに変更することができる模様。

以下の指定で、gmic が内蔵しているサンプル画像 tiger が再現された。
gmic sp tiger permute cxyz o -.raw | convert -depth 8 -size 750x500 rgb:- out.png


convert (ImageMagick)側の最後の出力を標準出力にしてみる。
gmic sp tiger permute cxyz o -.raw | convert -depth 8 -size 750x500 rgb:- png:- | py view_stdin.py
  • png:- と記述することで、標準出力に pngフォーマットで送るという指示になる。


ImageMagick側でガウシアンぼかしをかけてみる。
gmic sp tiger permute cxyz o -.raw | convert -depth 8 -size 750x500 rgb:- -gaussian-blur 10x10 png:- | py view_stdin.py

#3 [gmic][python] rawデータに変換してgmicに渡して処理をさせる

画像を読み込んで、gmic用rawデータの並びに変換して、標準出力に送るPythonスクリプトを、AI(Google Gemini)に作成してもらった。これを使って gmic の標準入力に画像データを渡して処理ができるか確認したい。

環境は Windows11 x64 25H2 + Python 3.10.10 64bit + Pillow 11.3.0。

_img2raw.py
import sys
import argparse
from PIL import Image


# 画像を読み込み、指定された形式のRAWデータとして標準出力に送る
def image_to_raw(image_path, interleaved=False):
    try:
        with Image.open(image_path) as img:
            # アルファチャンネルの有無を判定して適切なモードへ変換
            if "A" in img.getbands():
                img = img.convert("RGBA")
            else:
                img = img.convert("RGB")

            if interleaved:
                # ピクセル並びをインターリーブ形式(RGBRGB... / RGBARGBArgba...)にする
                # tobytes() は Pillow のメモリレイアウト(インターリーブ)をそのまま返す
                sys.stdout.buffer.write(img.tobytes())
            else:
                # プレーンごとに並べる Planar形式 (RRR...GGG...BBB...)
                # split() で各チャンネルに分離して順番に書き出す
                channels = img.split()
                for channel in channels:
                    sys.stdout.buffer.write(channel.tobytes())

    except Exception as e:
        print(f"Error: {e}", file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="Convert image to RAW data and send to stdout."
    )
    parser.add_argument("input", help="Input image file path.")
    parser.add_argument(
        "-i",
        "--interleaved",
        action="store_true",
        help="Output in interleaved format (RGBRGB... / RGBARGBArgba...).",
    )

    args = parser.parse_args()
    image_to_raw(args.input, interleaved=args.interleaved)

使い方は以下。

python img2raw.py lena.png > out.raw

py img2raw.py lena.png | gmic i -.raw,uint8,512,512,1,3 blur 10.0 o -.png > out.png
py img2raw.py lena.png | gmic input -.raw,uint8,512,512,1,3 blur 10.0 output -.png > out.png

py img2raw.py -i lena.png | convert -depth 8 -size 512x512 rgb:- png:- > out.png

rawデータは、画像サイズ、枚数、チャンネル数などの情報を持っていないので、それらの情報は別途指定して読み込む必要がある。

#4 [anime] 「数分間のエールを」を視聴

Eテレで放送されていた版を録画していたので視聴。日本で制作されたCGアニメ映画。MV制作を趣味にしている少年が主人公のストーリー。という説明で合ってるのかどうか…。

これは…いいな…。実にイイ感じの映画なのでは…。何かしらを作ったことがある人にはちょっと色々と刺さってきそうな内容のように思えた。素晴らしい。

脚本は花田十輝さん。少年少女の青春モノ企画ならまずこの人でしょう的ポジションになってる印象だけど、まとめ方、仕上げ方が上手いなあ…。さすがや…。

セルルックのようでいてちょっと違う、独特なスタイルの映像だったので、制作状況が気になってググってしまった。

_『数分間のエールを』No.1:映像制作チーム Hurray! が送る、初の劇場アニメーション
_『数分間のエールを』No.2:ルックデベロップメントと、「未明」MVの制作
_『数分間のエールを』No.3:モーションキャプチャと、画づくりの変遷

これまでMV制作を行ってきた映像クリエイター3人がコアメンバーになりつつ、別スタジオにも手助けしてもらって作った感じだったらしい。劇場アニメなのに基本3人で作ってしまうなんて、凄い時代になった…。

メインツールが blender だったとのことで「マジか」と思ってしまった。blenderでここまでの映像が作れてしまうのかと感心。手描きアニメの後追いにならないように映像スタイルについては独自性を追求したというのがまたイイ感じ。このスタイルのアニメ映像には新鮮さを感じた。

各カットにPCアプリのアレコレが挿入される見せ方にも感心。あの手のソレは、使ってる人なら瞬時に分かる記号のようなものになってきているのだなと…。

なにはともあれ、これはいいものを見せてもらったという印象。このアニメは良い。実に良い。素晴らしい。

2026/03/23(月) [n年前の日記]

#1 [cg_tools][gmic][python] G'MIC CLIを勉強中

G'MICという、無料で利用できる数百種類の画像フィルタ集がある。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Main

一般的には、GIMP、Krita、Paint.NET等の画像編集ソフトから呼び出して、GUIでパラメータを指定して利用することがほとんどだろうけど…。この G'MIC には CLI版があって、ImageMagick っぽい感じのコマンドラインツールとして利用することもできる。

その G'MIC CLI (gmic.exe) の使い方について勉強中。

環境は Windows11 x64 25H2 + G'MIC CLI 3.7.4。

インストール :

公式ページの、「Command-line interface (CLI):」から入手。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Download

gmic_3.7.4_cli_win64.zip を入手して解凍。今回は D:\home2\bin\gmic_cli\ に配置した。

余談だけど、G'MIC CLI 3.7.4 をインストールしたのに、バージョン表示は 3.7.3 になってるな…。
> gmic version

  gmic: GREYC's Magic for Image Computing: Command-Line Interface
        Version 3.7.3 (pre-release #26031110)
        (https://gmic.eu)

        Copyright (c) 2008-2026, David Tschumperlテゥ / GREYC / CNRS.
        (https://www.greyc.fr)

パスを通す :

環境変数PATHに G'MIC CLI (gmic.exe) のインストール場所を追加しておけば gmic.exe が使えるようになるけれど…。

自分の場合は実験時しか使わないだろうから、batファイルを実行した時だけ環境変数PATHに追加して使えるようにしてみた。このbatファイルはAI(Google Gemini)に作ってもらった。

gmic.bat
@echo off
if defined HOMEBIN (
    echo # HOMEBIN is defined: %HOMEBIN% >&2
    set "GMICCLIPATH=%HOMEBIN%\gmic_cli"
) else (
    echo # HOMEBIN is NOT defined. Using default path. >&2
    set "GMICCLIPATH=D:\home2\bin\gmic_cli"
)
where gmic.exe >nul 2>nul
if %ERRORLEVEL% neq 0 (
    echo # Not found gmic.exe. Adding to Path... >&2
    set "PATH=%GMICCLIPATH%;%PATH%"
    echo # G'MIC CLI is now enabled. [%GMICCLIPATH%] >&2
)
gmic.exe %*

gmic.bat を実行すると、gmic.exe が見えてるか見えてないかで処理を分けて、見えてない時だけ環境変数PATHの先頭にgmic.exeの場所を追加する。その後、同じコマンドプロンプトの中で gmic と打てば gmic.exe のほうが呼ばれる状態になる。

echo行の最後についている「>&2」は、STDERR に出力せよという指定。そのままだと標準出力(STDOUT)に出してしまうけれど、標準入力/標準出力を利用した実験をする時にマズいので、STDERR に出力するようにしておいた。

サンプル画像を使う :

G'MIC CLI(gmic.exe)には各種実験に使えそうなサンプル画像も同梱/内蔵されているらしい。

以下で取り出せる。
gmic sp lena o out.png
or
gmic sample lena output out.png
  • sp/sample : サンプル画像を利用するという指定。
  • lena : lena画像を指定。
  • o/output : 出力を指定
  • out.png : 今回の出力画像ファイル名。

リファレンスは以下にある。

_gmic_reference.pdf

リファレンスによると、サンプル画像として以下を指定できるらしい。めっちゃある…。わざわざ実験用画像を用意しなくても済むのはありがたい。
apples
balloons
barbara
boats
bottles
butterfly
cameraman
car
cat
cliff
chick
colorful
david
dog
duck
eagle
elephant
earth
flower
fruits
gmicky
gmicky_mahvin
gmicky_wilber
greece
gummy
house
inside
landscape
leaf
lena
leno
lion
mandrill
monalisa
monkey
parrots
pencils
peppers
portrait0
portrait1
portrait2
portrait3
portrait4
portrait5
portrait6
portrait7
portrait8
portrait9
roddy
rooster
rose
square
swan
teddy
tiger
tulips
wall
waterfall
zelda

標準出力に結果を出力 :

G'MIC CLI(gmic.exe)は、標準入力から画像データを受け取ったり、標準出力に画像データを送ったりすることができるらしい。

標準出力に画像データを送る例。サンプル画像「tiger」を、標準出力に、pngフォーマットで送っている。
gmic sample tiger output -.png > out.png
  • 「-」という指定は標準入力や標準出力を示す。
  • その後に続く拡張子指定 ―― 「.png」等で画像フォーマットを指定する。
  • 「> out.png」により標準出力の結果を out.png としてファイル保存する。リダイレクトと呼ぶらしい。


gmicで標準出力に画像データを送り、パイプを経由して別のgmicの標準入力に渡して、グレースケール化して、また標準出力に送ってファイル保存する例。
gmic sp lena o -.png | gmic input -.png to_gray o -.png > out.png
  • sp lena : サンプル画像として lena を用意している。sample lena と書いても良い。
  • o -.png : 標準出力にpngフォーマットで出力。 output -.png と書いても良い。
  • 「|」がパイプ。標準出力を標準入力に渡すための指定。
  • input -.png : 標準入力からpngフォーマットの画像を受け取る。i -.png と書いても良い。
  • to_gray : グレースケール化。luminance を指定しても似た結果になる。
  • > out.png : 標準出力の結果を out.png としてファイル保存。


ベタデータで送る場合は以下。
gmic sp lena o -.raw,uint8 | gmic i -.raw,uint8,512,512,1,3 to_gray o -.png > out.png
  • -.raw,uint8 で、ベタデータをbyte単位で送るという指示になる。
  • 受け取る側は、-.raw,uint8,横幅,縦幅,枚数,チャンネル数、を指定する…のだと思う。最後のあたりは理解が怪しい。
  • ベタデータの場合は、画像サイズ、枚数、チャンネル数などが分からないので、それらの情報も伝えないといけない。
  • RGB画像ならチャンネル数は3に、RGBA画像ならチャンネル数は4になる。

標準入力から画像データを読み込んで表示するPythonスクリプト :

gmic から標準出力に画像を送った際、どんな画像になったのか確認するのが面倒臭い。標準入力から画像データを読み込んで表示するPythonスクリプトをAI(Google Gemini)に作成してもらった。

環境は Windows11 x64 25H2 + Python 3.10.10 64bit。Pillow 11.3.0 + tkinter を使ってる。

_view_stdin.py
import sys
import io
import tkinter as tk
from PIL import Image, ImageTk

def display_in_tkinter():
    # 1. 標準入力からバイナリデータを読み込む
    input_data = sys.stdin.buffer.read()
    if not input_data:
        print("Error : Not found data")
        return

    try:
        # 2. Pillowで画像データとして読み込み
        pil_img = Image.open(io.BytesIO(input_data))
        
        # 3. Tkinterウィンドウの設定
        root = tk.Tk()
        root.title("Stdin Image Viewer")

        # --- キーバインド設定 ---
        # ESCキー、大文字Q、小文字q のいずれかでウィンドウを閉じる
        root.bind('<Escape>', lambda e: root.destroy())
        root.bind('<q>', lambda e: root.destroy())
        root.bind('<Q>', lambda e: root.destroy())

        # 4. Pillowの画像をTkinter用のフォーマットに変換
        tk_img = ImageTk.PhotoImage(pil_img)

        # 5. ラベルウィジェットに画像をセットして配置
        label = tk.Label(root, image=tk_img)
        label.pack(padx=10, pady=10)

        # 6. Closeボタンの追加
        # command=root.destroy を指定することでクリック時に終了します
        btn = tk.Button(root, text="Close (Q)", command=root.destroy, width=20)
        btn.pack(pady=5)

        # ウィンドウを表示
        root.mainloop()

    except Exception as e:
        print(f"Error : {e}")

if __name__ == "__main__":
    display_in_tkinter()
  • ESCキー、Qキーを押せば終了する。


以下のような感じで使える。
cat lena.png | py view_stdin.py
gmic sp lena o -.png | py view_stdin.py

以下のような見た目になる。

view_stdin_ss01.png

Ubuntu Linux上でインストールされるバージョン :

Ubuntu Linux 24.04 LTS上で gmic をインストールするとバージョンは何になるのかが気になった。Ubuntu Linux 24.04 LTS をベースにしている Zorin OS 18 上で確認してみた。

sudo apt install gmic
sudo apt install imagemagick

```
$ gmic version

  gmic: GREYC's Magic for Image Computing: command-line interface
        Version 2.9.4
        (https://gmic.eu)

        Copyright (c) 2008-2026, David Tschumperle / GREYC / CNRS.
        (https://www.greyc.fr)

$ convert -version
Version: ImageMagick 6.9.12-98 Q16 x86_64 18038 https://legacy.imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5) 
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png raw tiff webp wmf x xml zlib

gmic 2.9.4、ImageMagick 6.9.2-98 Q16 か…。古いね…。

ImageMagick が7系ではなく6系なのは、他のアプリとの兼ね合いなんだろう…。6系はコマンド名が convert だけど、7系では magick になっていたはずだし…。

Ubuntu Linux系なら、例えば以下で gmic の動作確認ができる。
gmic sp lena o -.png | display -
  • 標準出力の内容を確認するには ImageMagick の display が使える。
  • 「-」を記述することで標準入力/標準出力であることを指定する。

以上、3 日分です。

過去ログ表示

Prev - 2026/03 -
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project