画像をぼかしたいです。変換コマンドを使用して画像形式を.bmpからpbmに変更してから、再びbmpに変更しています。
私の考えは、画像の各ピクセルを繰り返し、現在のピクセルとローカルピクセルの平均を計算し、平均を割り当てることです。
残念ながら、画像をbmpに変換しようとするとエラーが発生します。
convert: improper image header `newFile.ppm' @ error/pnm.c/ReadPNMImage/282.
convert: no images defined `newFile.bmp' @ error/convert.c/ConvertImageCommand/3210.
私のスクリプトは次のとおりです。GNU nano 2.5.3ファイル:Blur.sh
#!/bin/sh
name=$(echo $1 | cut -d'.' -f1)
echo $name
name="$name.ppm"
echo $name
awk 'BEGIN {FS=" "}
/^.*/{
for(i=0; i < NF -5; i++) {
avarage=(($i + $($i+1) + $($i+2))/3)
printf $avarage" "
if(i > 100) {printf $i >> "newFile.ppm" }
else {
printf $avarage" " >> "newFile.ppm"
printf $avarage" " >> "newFile.ppm"
printf $avarage" " >> "newFile.ppm"
}
}
}' $name
ベストアンサー1
awk
ひどい画像処理ツールです。
正しいPPMイメージヘッダが出力ファイルに書き込まれないため、問題が発生します。また、入力ファイルのヘッダーを無視します。 PPM画像タイプがP3
(ASCIIでエンコードされたRGB)、P2
(ASCIIでエンコードされたグレースケール)、またはP1
(ASCIIでエンコードされた白黒)タイプではない場合、通常はテキストファイルのように読み取ることはできません。バイナリファイルになります)。
このヘッダの形式については後述する。Netpbm形式に関するWikipediaの記事。記事に提示された例は次のとおりです。
P3
3 2
255
# The part above is the header
# "P3" means this is a RGB color image in ASCII
# "3 2" is the width and height of the image in pixels
# "255" is the maximum value for each color
# The part below is image data: RGB triplets
255 0 0 0 255 0 0 0 255
255 255 0 255 255 255 0 0 0
この例では行ごとに3つのピクセルがありますが、この記事の後半の例では改行は重要ではなく、ピクセルのRGB値を正規化できることを示しています。
同じ写真:
P3
# The same image with width 3 and height 2,
# using 0 or 1 per color (red, green, blue)
3 2 1
1 0 0 0 1 0 0 0 1
1 1 0 1 1 1 0 0 0
同じ写真:
P3 3 2 1 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0 0
また、ループは各行の最後の3つのRGB値(または画像がグレースケールまたは白黒の場合は最後の3ピクセル)を無視します。