이미지 처리 과정에서 대조도(Contrast)는 이미지의 밝기 차이를 나타냅니다. 대조도를 조절하여 이미지를 더 선명하게 하거나 시각적인 효과를 부여할 수 있습니다. Go 언어에서는 image
패키지를 사용하여 이미지를 읽고 처리할 수 있습니다. 이 글에서는 Go 언어를 사용하여 이미지의 대조도를 조절하는 방법을 살펴보겠습니다.
이미지 읽기
먼저, 이미지를 읽어야 합니다. Go 언어에서는 image
패키지의 Decode
함수를 사용하여 이미지 파일을 디코딩할 수 있습니다. 아래는 JPEG 이미지를 읽는 예제 코드입니다.
package main
import (
"image"
_ "image/jpeg"
"os"
)
func main() {
file, err := os.Open("input.jpg")
if err != nil {
panic(err)
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
panic(err)
}
}
위의 코드에서 image.Decode
함수를 사용하여 input.jpg
파일을 읽고, img
변수에 이미지를 저장합니다.
대조도 조절
이제 이미지의 대조도를 조절해보겠습니다. Go 언어에서는 이미지의 각 픽셀을 조작하여 대조도를 조절할 수 있습니다. 대조도를 조절하는 가장 간단한 방법은 이미지의 모든 픽셀 값에 상수를 더하거나 빼는 것입니다. 아래는 대조도를 조절하는 예제 코드입니다.
package main
import (
"image"
"image/color"
_ "image/jpeg"
"os"
)
func main() {
file, err := os.Open("input.jpg")
if err != nil {
panic(err)
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
panic(err)
}
contrast := 50
bounds := img.Bounds()
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
for x := bounds.Min.X; x < bounds.Max.X; x++ {
oldPixel := img.At(x, y)
r, g, b, a := oldPixel.RGBA()
newR := uint32(clamp(int(r) + contrast))
newG := uint32(clamp(int(g) + contrast))
newB := uint32(clamp(int(b) + contrast))
newPixel := color.RGBA64{newR, newG, newB, uint16(a)}
img.Set(x, y, newPixel)
}
}
}
위의 코드에서는 contrast
변수를 사용하여 대조도를 조절하였습니다. 각 픽셀의 RGB 값을 contrast
만큼 조절하여 새로운 이미지를 생성합니다. 이때 clamp
함수는 값이 0 미만이거나 65535를 초과하는 경우를 대비하여 값을 조정합니다.
처리된 이미지 저장
대조도를 조절한 이미지를 저장하는 방법은 다음과 같습니다.
output, err := os.Create("output.jpg")
if err != nil {
panic(err)
}
defer output.Close()
jpeg.Encode(output, img, nil)
위의 예제 코드에서는 jpeg.Encode
함수를 사용하여 이미지를 JPEG 파일로 저장합니다.
이제 위의 예제 코드를 참고하여 Go 언어에서 이미지의 대조도를 조절하는 방법을 익히고 개별 프로젝트에 적용해보세요.