[go] 이미지 변환

이미지 변환은 컴퓨터 비전 및 이미지 처리에서 중요한 작업 중 하나입니다. 고 언어를 사용하여 이미지를 변환하고 처리하는 방법에 대해 알아보겠습니다.

이미지 로딩

먼저, 이미지를 로딩하는 방법부터 살펴봅시다. image 패키지는 이미지를 로딩하고 저장하는 데 필요한 함수와 구조체를 제공합니다. 아래는 이미지를 로드하는 간단한 예제입니다.

package main

import (
	"fmt"
	"image"
	_ "image/png"
	"os"
)

func main() {
	file, err := os.Open("input.png")
	if err != nil {
		fmt.Println("이미지를 열 수 없습니다.", err)
		return
	}
	defer file.Close()

	img, _, err := image.Decode(file)
	if err != nil {
		fmt.Println("이미지를 디코딩할 수 없습니다.", err)
		return
	}

	fmt.Println("이미지 로딩 완료:", img.Bounds())
}

위 코드는 image/png 패키지를 사용하여 PNG 형식의 이미지를 로드합니다. JPEG나 GIF 형식의 이미지도 동일한 방식으로 로딩할 수 있습니다.

이미지 변환

고 언어는 이미지 변환을 위한 여러 함수를 제공합니다. 이미지를 크기 조정하거나 회전시키는 등의 작업을 아래와 같이 수행할 수 있습니다.

package main

import (
	"fmt"
	"image"
	_ "image/jpeg"
	"image/png"
	"os"
)

func main() {
	file, err := os.Open("input.jpg")
	if err != nil {
		fmt.Println("이미지를 열 수 없습니다.", err)
		return
	}
	defer file.Close()

	img, _, err := image.Decode(file)
	if err != nil {
		fmt.Println("이미지를 디코딩할 수 없습니다.", err)
		return
	}

	newImg := resizeImage(img, 300, 200)

	outFile, err := os.Create("output.png")
	if err != nil {
		fmt.Println("출력 파일을 생성할 수 없습니다.", err)
		return
	}
	defer outFile.Close()

	err = png.Encode(outFile, newImg)
	if err != nil {
		fmt.Println("이미지를 저장할 수 없습니다.", err)
		return
	}

	fmt.Println("이미지 변환 완료")
}

func resizeImage(img image.Image, width, height int) image.Image {
	newImg := image.NewRGBA(image.Rect(0, 0, width, height))
	draw.CatmullRom.Scale(newImg, newImg.Bounds(), img, img.Bounds(), draw.Src, nil)
	return newImg
}

위 코드에서 resizeImage 함수를 사용하여 이미지의 크기를 조정하고, png.Encode 함수를 사용하여 이미지를 PNG 형식으로 저장합니다.

결론

고 언어를 사용하여 이미지를 로딩하고 변환하는 방법에 대해 간략하게 알아보았습니다. 이미지 처리에는 다양한 기술과 라이브러리가 있으며, 고 언어는 이미지 처리를 위한 다양한 패키지를 제공하고 있습니다. 고언어의 이미지 처리 기능을 활용하여 다양한 이미지 변환 및 처리 작업을 수행할 수 있습니다.

참고 자료

위 예제 코드 및 자세한 정보는 Go 이미지 처리 공식 문서에서 확인할 수 있습니다.