Maison  >  Article  >  développement back-end  >  Comment utiliser Golang pour effectuer un histogramme des couleurs et un traitement de binarisation sur les images

Comment utiliser Golang pour effectuer un histogramme des couleurs et un traitement de binarisation sur les images

WBOY
WBOYoriginal
2023-08-17 15:25:19893parcourir

Comment utiliser Golang pour effectuer un histogramme des couleurs et un traitement de binarisation sur les images

Comment utiliser Golang pour effectuer un histogramme des couleurs et un traitement de binarisation sur des images

Avec l'application généralisée du traitement d'images numériques, le traitement et l'analyse d'images sont également devenus un sujet brûlant dans le domaine de la vision par ordinateur. Parmi elles, l'histogramme des couleurs et la binarisation sont deux méthodes de traitement d'image courantes et importantes. Cet article explique comment utiliser Golang pour effectuer un histogramme de couleurs et un traitement de binarisation sur des images, et est accompagné d'exemples de code.

L'histogramme des couleurs est une statistique de la fréquence de couleur des pixels d'une image. L'analyse d'histogramme peut être utilisée dans des applications telles que l'amélioration d'images, la récupération d'images et la classification d'images. Voici un exemple de code qui utilise Golang pour calculer un histogramme de couleurs :

package main

import (
    "fmt"
    "image"
    "image/color"
    "log"
    "os"
)

func main() {
    imgFile, err := os.Open("test.jpg") // 读取图像文件
    if err != nil {
        log.Fatal(err)
    }
    defer imgFile.Close()

    img, _, err := image.Decode(imgFile) // 解码图像
    if err != nil {
        log.Fatal(err)
    }

    bounds := img.Bounds()
    histogram := make(map[color.Color]int) // 创建颜色直方图

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            c := img.At(x, y)
            histogram[c]++
        }
    }

    for c, count := range histogram {
        fmt.Printf("颜色: %v,频率: %d
", c, count)
    }
}

Le code ci-dessus ouvre et décode d'abord le fichier image, puis crée un histogramme de couleurs. En parcourant chaque pixel et en comptant la fréquence des occurrences de couleurs, un histogramme des couleurs d'une image est finalement obtenu. Ici, nous utilisons directement la fonction image.Decode de la bibliothèque officielle de Golang image pour décoder l'image. Vous pouvez choisir d'autres bibliothèques de traitement d'image en fonction de vos propres besoins. image中的image.Decode函数解码图像,你可以根据自己的需求选择其他的图像处理库。

二值化是将一幅图像转换为只有两种颜色的图像,通常是黑色和白色。这个过程可以简化复杂的图像,也可以提取图像中的关键信息。下面是一个使用Golang对图像进行二值化处理的示例代码:

package main

import (
    "image"
    "image/color"
    "log"
    "os"
)

func main() {
    imgFile, err := os.Open("test.jpg") // 读取图像文件
    if err != nil {
        log.Fatal(err)
    }
    defer imgFile.Close()

    img, _, err := image.Decode(imgFile) // 解码图像
    if err != nil {
        log.Fatal(err)
    }

    bounds := img.Bounds()
    binaryImg := image.NewGray(bounds) // 创建一个新的灰度图像

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            c := img.At(x, y)
            gray := color.GrayModel.Convert(c).(color.Gray)
            if gray.Y >= 128 {
                binaryImg.SetGray(x, y, color.White) // 大于等于128的像素点设为白色
            } else {
                binaryImg.SetGray(x, y, color.Black) // 小于128的像素点设为黑色
            }
        }
    }

    binaryFile, err := os.Create("binary.jpg") // 创建输出文件
    if err != nil {
        log.Fatal(err)
    }
    defer binaryFile.Close()

    err = jpeg.Encode(binaryFile, binaryImg, &jpeg.Options{Quality: 100}) // 编码二值化图像
    if err != nil {
        log.Fatal(err)
    }
}

以上代码首先打开并解码图像文件,然后创建一个新的灰度图像。通过对每个像素点进行遍历,将像素点的灰度值与一个设定的阈值进行比较,并根据阈值选择设置黑色或白色。最后将二值化后的图像保存到文件中。同样,这里使用了Golang官方库image中的image.Decode

La binarisation est la conversion d'une image en une image avec seulement deux couleurs, généralement le noir et le blanc. Ce processus peut simplifier des images complexes et également extraire des informations clés de l'image. Voici un exemple de code qui utilise Golang pour binariser une image :

rrreee

Le code ci-dessus ouvre et décode d'abord le fichier image, puis crée une nouvelle image en niveaux de gris. En parcourant chaque pixel, la valeur de gris du pixel est comparée à un seuil défini, et le noir ou le blanc est sélectionné en fonction du seuil. Enfin, l'image binarisée est enregistrée dans un fichier. De même, la fonction image.Decode de la bibliothèque officielle de Golang image est utilisée ici pour décoder l'image. Vous pouvez choisir d'autres bibliothèques de traitement d'image en fonction de vos propres besoins. 🎜🎜Avec les deux exemples ci-dessus, vous pouvez facilement utiliser Golang pour effectuer un histogramme des couleurs et une binarisation des images. Ces méthodes de traitement d’images sont largement utilisées dans les domaines de la vision par ordinateur et de l’analyse d’images et peuvent nous aider à mieux comprendre et traiter les données d’images. Dans le même temps, Golang fournit une multitude de bibliothèques et de fonctions de traitement d'images, ce qui est très pratique pour notre travail de développement. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn