首頁  >  文章  >  後端開發  >  Golang圖片操作:如何調整亮度和對比度

Golang圖片操作:如何調整亮度和對比度

王林
王林原創
2023-08-19 16:53:111324瀏覽

Golang圖片操作:如何調整亮度和對比度

Golang圖片操作:如何調整亮度和對比度

引言:
在影像處理中,調整影像的亮度和對比度是非常常見的任務。透過調整亮度,我們可以使影像變得更明亮或更暗。而透過調整對比度,我們可以增加或減少影像中的色彩差異。本文將介紹如何使用Golang對影像進行亮度和對比度的調整,並提供程式碼範例。

  1. 導入必要的套件
    首先,我們需要導入image和color包,用於處理圖像的讀取和保存,以及顏色空間的轉換。
import (
    "image"
    "image/color"
    _ "image/jpeg"
    _ "image/png"
    "os"
)
  1. 讀取映像檔
    接下來,我們需要實作一個函數,用於讀取映像檔並返回image.Image物件。
func loadImage(path string) (image.Image, error) {
    file, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        return nil, err
    }

    return img, nil
}
  1. 調整亮度
    亮度是影像像素的強度或亮度等級。透過調整每個像素的RGB分量,我們可以增加或減少影像的亮度。下面是一個範例函數,用於調整影像的亮度。
func adjustBrightness(img image.Image, level int) image.Image {
    bounds := img.Bounds()
    dest := image.NewRGBA(bounds)

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            oldColor := img.At(x, y)
            r, g, b, a := oldColor.RGBA()

            r = uint32((int(r) * level) / 100)
            g = uint32((int(g) * level) / 100)
            b = uint32((int(b) * level) / 100)

            newColor := color.RGBA64{uint16(r), uint16(g), uint16(b), uint16(a)}

            dest.Set(x, y, newColor)
        }
    }

    return dest
}

在上面的程式碼中,我們使用一個循環來迭代圖像中的每個像素,並根據給定的亮度等級來調整每個像素的RGB分量。

  1. 調整對比
    對比決定了影像中不同顏色之間的差異程度。透過調整每個像素的RGB分量,我們可以增加或減少影像的對比。下面是一個範例函數,用於調整影像的對比度。
func adjustContrast(img image.Image, level int) image.Image {
    bounds := img.Bounds()
    dest := image.NewRGBA(bounds)

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            oldColor := img.At(x, y)
            r, g, b, a := oldColor.RGBA()

            r = uint32(128 + (int(r)-128)*level/100)
            g = uint32(128 + (int(g)-128)*level/100)
            b = uint32(128 + (int(b)-128)*level/100)

            newColor := color.RGBA64{uint16(r), uint16(g), uint16(b), uint16(a)}

            dest.Set(x, y, newColor)
        }
    }

    return dest
}

在上面的程式碼中,我們使用一個循環來迭代圖像中的每個像素,並根據給定的對比度等級來調整每個像素的RGB分量。

  1. 範例
    最後,我們可以使用上述函數來調整影像的亮度和對比。
func main() {
    img, err := loadImage("input.jpg")
    if err != nil {
        fmt.Println("Failed to load image:", err)
        return
    }

    brightImg := adjustBrightness(img, 150)
    contrastImg := adjustContrast(img, 200)

    saveImage(brightImg, "bright_output.jpg")
    saveImage(contrastImg, "contrast_output.jpg")
}

在上面的程式碼中,我們首先使用loadImage函數來載入輸入圖像,然後分別呼叫adjustBrightness和adjustContrast函數來調整圖像的亮度和對比度。最後,我們使用saveImage函數將調整後的圖像儲存到檔案中。

總結:
本文介紹了使用Golang調整影像亮度和對比度的方法,並提供了相應的程式碼範例。透過調整亮度和對比度,我們可以改善影像的視覺效果,並在影像處理中應用更多的技術。透過借助Golang的圖像處理庫,我們可以輕鬆地實現這些任務,並在自己的專案中應用。

以上是Golang圖片操作:如何調整亮度和對比度的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn