awk를 사용하여 이미지를 흐리게 처리

awk를 사용하여 이미지를 흐리게 처리

이미지를 흐리게 하려고 합니다. 변환 명령을 사용하여 이미지 형식을 .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픽셀)을 무시합니다.

관련 정보