Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Manipulasi imej Golang: cara menskala kelabu dan melaraskan kecerahan imej

Manipulasi imej Golang: cara menskala kelabu dan melaraskan kecerahan imej

WBOY
WBOYasal
2023-08-18 09:01:48998semak imbas

Manipulasi imej Golang: cara menskala kelabu dan melaraskan kecerahan imej

Kendalian Imej Golang: Cara Melaraskan Skala Kelabu dan Kecerahan Imej

Pengenalan:
Dalam proses pemprosesan imej, selalunya perlu melakukan pelbagai operasi pada imej, seperti skala kelabu imej dan pelarasan kecerahan. Di Golang, kami boleh mencapai operasi ini dengan menggunakan perpustakaan pihak ketiga. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaraskan imej skala kelabu dan kecerahan serta melampirkan contoh kod yang sepadan.

1. Skala kelabu imej
Skala kelabu imej ialah proses menukar imej berwarna kepada imej skala kelabu. Dalam proses skala kelabu imej, kita perlu menukar setiap piksel dalam imej kepada nilai skala kelabu yang sepadan melalui algoritma tertentu. Seterusnya, kami akan menggunakan go-opencv perpustakaan pihak ketiga Golang untuk mencapai skala kelabu imej.

Mula-mula, masukkan arahan berikut dalam terminal untuk memasang perpustakaan go-opencv:

go get -u github.com/lazywei/go-opencv

Seterusnya, kami akan menunjukkan contoh kod cara menskala kelabu imej:

package main

import (
    "fmt"
    "github.com/lazywei/go-opencv/opencv"
)

func main() {
    imagePath := "test.jpg"
    // 通过go-opencv的LoadImage方法读取图片
    image := opencv.LoadImage(imagePath)
    defer image.Release()

    // 使用go-opencv的CvtColor方法将图片转为灰度图像
    grayImage := opencv.CreateImage(image.Width(), image.Height(), 8, 1)
    opencv.CvtColor(image, grayImage, opencv.CV_BGR2GRAY)

    // 保存灰度图像
    outputPath := "output_gray.jpg"
    opencv.SaveImage(outputPath, grayImage, 0)
    fmt.Printf("Gray image saved to: %s
", outputPath)
}

Kod di atas mula-mula memuatkan imej berwarna dan kemudian menggunakan Kaedah CvtColor menukar imej kepada skala kelabu. Akhir sekali, simpan imej skala kelabu yang dijana ke laluan keluaran yang ditentukan.

2. Pelarasan kecerahan
Pelarasan kecerahan merujuk kepada mengubah suai tahap kecerahan keseluruhan imej. Di Golang, kita boleh menggunakan perpustakaan pihak ketiga github.com/nfnt/resize untuk melaraskan kecerahan imej.

Mula-mula, masukkan arahan berikut dalam terminal untuk memasang perpustakaan nfnt/resize:

go get -u github.com/nfnt/resize

Seterusnya, kami akan menunjukkan contoh kod cara melaraskan kecerahan imej:

package main

import (
    "fmt"
    "image"
    "image/color"
    "github.com/nfnt/resize"
)

func main() {
    imagePath := "test.jpg"
    // 使用Golang内置的image包加载图片
    img, err := loadImage(imagePath)
    if err != nil {
        fmt.Printf("Failed to load image: %s
", err)
        return
    }

    // 调整图片亮度
    brightness := 50
    brightImage := adjustBrightness(img, brightness)

    // 保存亮度调整后的图片
    outputPath := "output_bright.jpg"
    saveImage(outputPath, brightImage)
    fmt.Printf("Brightness adjusted image saved to: %s
", outputPath)
}

// 加载图片
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
}

// 调整图片亮度
func adjustBrightness(img image.Image, brightness int) image.Image {
    b := img.Bounds()
    dst := image.NewRGBA(b)

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

            newR := uint8(clamp(int(r)+brightness, 0, 0xffff))
            newG := uint8(clamp(int(g)+brightness, 0, 0xffff))
            newB := uint8(clamp(int(b)+brightness, 0, 0xffff))

            newColor := color.RGBA{newR, newG, newB, 0xff}
            dst.Set(x, y, newColor)
        }
    }

    return dst
}

// 保存图片
func saveImage(path string, img image.Image) {
    file, err := os.Create(path)
    if err != nil {
        fmt.Printf("Failed to save image: %s
", err)
        return
    }
    defer file.Close()

    png.Encode(file, img)
}

// 辅助函数,限定数值在指定范围内
func clamp(value, min, max int) int {
    if value < min {
        return min
    }
    if value > max {
        return max
    }
    return value
}

Kod di atas mula-mula memuatkan imej berwarna, dan kemudian berdasarkan yang diberikan Laraskan kecerahan gambar dengan parameter kecerahan yang ditentukan, dan simpan gambar yang dilaraskan ke laluan output yang ditentukan.

Ringkasan:
Artikel ini memperkenalkan cara menggunakan Golang kepada skala kelabu dan melaraskan kecerahan imej. Dengan menggunakan perpustakaan pihak ketiga, kami boleh melaksanakan operasi pemprosesan imej ini dengan mudah. Saya harap contoh kod dalam artikel ini akan membantu anda untuk pemprosesan imej di Golang.

Atas ialah kandungan terperinci Manipulasi imej Golang: cara menskala kelabu dan melaraskan kecerahan imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Artikel berkaitan

Lihat lagi