[go] go 언어에서의 이미지 히스토그램 분석
이번 포스트에서는 Go 언어를 사용하여 이미지의 히스토그램을 분석하는 방법에 대해 알아보겠습니다. 이미지 히스토그램은 이미지에서 각 픽셀값의 빈도를 보여주는 그래픽 표현입니다. 이미지의 대비, 밝기 및 색상 분포를 이해하는 데 도움이 됩니다.
이미지 불러오기
우선 이미지를 불러오기 위해 Go의 image 라이브러리를 사용할 수 있습니다. 이미지를 불러온 후에는 각 픽셀의 밝기 값을 추출하여 히스토그램을 생성할 수 있습니다.
다음은 이미지를 불러오고 각 픽셀의 밝기 값을 추출하는 예시 코드입니다.
import (
"image"
_ "image/jpeg"
"os"
)
func loadImage(filename string) (image.Image, error) {
file, err := os.Open(filename)
if err != nil {
return nil, err
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
return nil, err
}
return img, nil
}
히스토그램 생성
이미지를 불러온 후에는 히스토그램을 생성하여 각 픽셀값의 분포를 확인할 수 있습니다. Go 언어에서는 gonum.org/v1/plot 라이브러리를 사용하여 히스토그램을 시각적으로 표현할 수 있습니다.
아래는 이미지의 히스토그램을 생성하는 예시 코드입니다.
import (
"fmt"
"image"
"image/color"
"gonum.org/v1/plot"
"gonum.org/v1/plot/plotter"
"gonum.org/v1/plot/vg"
)
func createHistogram(img image.Image) {
bounds := img.Bounds()
width, height := bounds.Max.X, bounds.Max.Y
hist := make(map[uint8]int)
for y := 0; y < height; y++ {
for x := 0; x < width; x++ {
r, g, b, _ := img.At(x, y).RGBA()
gray := color.RGBA{uint8(r >> 8), uint8(g >> 8), uint8(b >> 8), 255}
grayVal := gray.Y
hist[grayVal]++
}
}
p, err := plot.New()
if err != nil {
fmt.Println(err)
return
}
values := make(plotter.Values, 256)
for i := 0; i < 256; i++ {
values[i] = float64(hist[uint8(i)])
}
h, err := plotter.NewBarChart(values, vg.Points(1))
if err != nil {
fmt.Println(err)
return
}
p.Add(h)
p.Save(4*vg.Inch, 4*vg.Inch, "histogram.png")
}
이제 Go를 사용하여 이미지의 히스토그램을 분석하는 방법에 대해 알아보았습니다. 이미지 히스토그램을 통해 이미지의 대비와 분포를 시각적으로 확인할 수 있습니다.
이처럼 이미지 처리를 통해 다양한 분야에서 실용적인 애플리케이션을 개발할 수 있습니다.