Maison > développement back-end > Golang > le corps du texte

Comment faire du traitement d'image dans Go ?

PHPz
Libérer: 2023-05-11 16:45:12
original
1287 Les gens l'ont consulté

En tant que langage de programmation efficace, Go présente également de bonnes performances dans le domaine du traitement d'images. Bien que la propre bibliothèque standard de Go ne fournisse pas d'API spécialisées liées au traitement d'images, il existe d'excellentes bibliothèques tierces que nous pouvons utiliser, telles que GoCV, ImageMagick et GraphicsMagick. Cet article se concentrera sur l'utilisation de GoCV pour le traitement d'images.

GoCV est une bibliothèque de liaison du langage Go qui dépend fortement d'OpenCV. Sa conception d'API est très similaire à opencv-python de Python et à OpenCV de C++, elle est donc facile à apprendre et à démarrer, et peut être utilisée pour traiter des images. vidéo, caméra et autres tâches. Ci-dessous, nous présenterons la mise en œuvre de plusieurs tâches de traitement d'image couramment utilisées.

  1. Chargement et sauvegarde de l'image

Avant le traitement de l'image, vous devez lire l'image et enregistrer l'image traitée. GoCV fournit de nombreuses fonctions pour nous aider à réaliser ce processus. Voici un exemple de chargement et de stockage d'une image :

package main

import (
    "fmt"
    "gocv.io/x/gocv"
)

func main() {
    img := gocv.IMRead("test.jpg", gocv.IMReadColor)

    if img.Empty() {
        fmt.Println("读取图像失败")
        return
    }

    gocv.IMWrite("out.jpg", img)
}
Copier après la connexion

Dans cet exemple, la fonction IMRead est utilisée pour lire une image au format JPG. Le deuxième paramètre précise la conversion requise lors de la lecture de l'image. . méthode, où gocv.IMReadColor signifie que l'image lue doit être convertie en image couleur. Ensuite, nous déterminons si la lecture est réussie. Si l'image lue est vide, alors la lecture échoue. Enfin, utilisez la fonction IMWrite pour enregistrer l'image à l'emplacement spécifié. L'image enregistrée ici est également au format JPG. IMRead 函数用于读取一张 JPG 格式的图像,第二个参数指定了读取图像时需要转换的方式,其中 gocv.IMReadColor 表示读取的图像需要转换为彩色图像。然后我们判断一下读取是否成功,如果读取的图像是空的,那么说明读取失败。最后使用 IMWrite 函数将图像保存到指定位置,这里保存的图像也是 JPG 格式。

  1. 图像缩放

图像缩放在图像处理中是一个非常常见的任务。缩小图像可以用于减少图像大小,加快计算速度,而放大图像则可以用于增强图像细节。GoCV 提供了 Resize 函数用于实现图像缩放的操作,下面是一个简单的缩放图像的例子:

package main

import (
    "gocv.io/x/gocv"
)

func main() {
    img := gocv.IMRead("test.jpg", gocv.IMReadColor)
    dst := gocv.NewMat()

    gocv.Resize(img, &dst, image.Point{}, 0.5, 0.5, gocv.InterpolationDefault)

    gocv.IMWrite("out.jpg", dst)
}
Copier après la connexion

在这个例子中,我们首先使用 IMRead 函数读取了一张图像,然后使用 NewMat 函数创建了一个大小与原图尺寸相同的 Mat 对象。Resize 函数用于将原图缩小为一半,最后使用 IMWrite 将处理后的图像保存到指定位置。

  1. 图像裁剪

图像裁剪可以用于对图像进行局部处理,可以在提取感兴趣区域、裁剪无用信息、提取目标物体等方面起到非常重要的作用。GoCV 提供了 ROI 函数用于实现图像裁剪的操作,下面是一个简单的图像裁剪的例子:

package main

import (
    "gocv.io/x/gocv"
)

func main() {
    img := gocv.IMRead("test.jpg", gocv.IMReadColor)
    dst := img.Region(gocv.NewRect(50, 50, 200, 200))

    gocv.IMWrite("out.jpg", dst)
}
Copier après la connexion

在这个例子中,我们首先使用 IMRead 函数读取一张图像,然后使用 Region 函数从中提取一个感兴趣的区域。这里的 gocv.NewRect(50, 50, 200, 200) 表示裁剪出的感兴趣区域是一个长为 200 像素,宽为 200 像素,左上角坐标为 (50, 50) 的矩形。最后使用 IMWrite 将处理后的图像保存到指定位置。

  1. 图像滤波

图像滤波可以用于去除图像噪声、平滑图像等操作。GoCV 也提供了很多滤波函数供我们使用,包括 GaussianBlurMedianBlurBilateralFilter 等。下面是一个使用高斯滤波的例子:

package main

import (
    "gocv.io/x/gocv"
)

func main() {
    img := gocv.IMRead("test.jpg", gocv.IMReadGrayScale)
    dst := gocv.NewMat()

    gocv.GaussianBlur(img, &dst, image.Point{X: 5, Y: 5}, 0, 0, gocv.BorderDefault)

    gocv.IMWrite("out.jpg", dst)
}
Copier après la connexion

在这个例子中,我们使用 IMRead 函数载入一张灰度图像,然后使用 NewMat 函数创建一个与原图尺寸相同的 Mat 对象。这里使用的是高斯滤波函数 GaussianBlur,第二个参数就是输出结果的 Mat 对象。第三个参数 image.Point{X: 5, Y:5} 表示进行滤波时使用的模板大小,这里是一个长为 5 像素,宽为 5 像素的矩形。最后使用 IMWrite 将处理后的图像保存到指定位置。

  1. 图像分割

图像分割是一项重要的图像处理任务,它可以用于分离目标物体、预处理数据产生特定的特征等任务中。GoCV 提供了 Canny 函数用于实现边缘检测,可以用于实现简单的图像分割。下面是一个使用 Canny 函数的例子:

package main

import (
    "gocv.io/x/gocv"
)

func main() {
    img := gocv.IMRead("test.jpg", gocv.IMReadGrayScale)
    dst := gocv.NewMat()

    gocv.Canny(img, &dst, 100, 200)

    gocv.IMWrite("out.jpg", dst)
}
Copier après la connexion

在这个例子中,我们使用 IMRead 函数载入一张灰度图像,然后使用 NewMat 函数创建一个与原图尺寸相同的 Mat 对象。这里使用的是 Canny 边缘检测函数 Canny,其中第二个参数就是输出结果的 Mat 对象。第三个和第四个参数 100, 200 分别表示最小和最大的阈值,可以根据实际问题进行调整。最后使用 IMWrite

    Mise à l'échelle de l'image

    🎜La mise à l'échelle de l'image est une tâche très courante dans le traitement d'images. Le rétrécissement d'une image peut être utilisé pour réduire la taille de l'image et accélérer les calculs, tandis que l'agrandissement d'une image peut être utilisé pour améliorer les détails de l'image. GoCV fournit la fonction Resize pour les opérations de mise à l'échelle d'une image. Voici un exemple simple de mise à l'échelle d'une image : 🎜rrreee🎜Dans cet exemple, nous utilisons d'abord la fonction IMRead. read, puis la fonction NewMat est utilisée pour créer un objet Mat de la même taille que l'image originale. La fonction Resize est utilisée pour réduire l'image originale de moitié, et enfin utiliser IMWrite pour enregistrer l'image traitée à l'emplacement spécifié. 🎜
      🎜Recadrage d'images🎜🎜🎜Le recadrage d'images peut être utilisé pour effectuer un traitement local sur des images et peut jouer un rôle très important dans l'extraction de zones d'intérêt, le recadrage d'informations inutiles et l'extraction d'objets cibles. GoCV fournit la fonction ROI pour les opérations de recadrage d'image. Voici un exemple simple de recadrage d'image : 🎜rrreee🎜Dans cet exemple, nous utilisons d'abord la fonction IMRead Lire une image et l'extraire. une région d'intérêt à partir de celle-ci à l'aide de la fonction Region. Ici, gocv.NewRect(50, 50, 200, 200) signifie que la zone d'intérêt recadrée mesure 200 pixels de long, 200 pixels de large et que les coordonnées du coin supérieur gauche sont (50, 50) rectangle. Enfin, utilisez IMWrite pour enregistrer l'image traitée à l'emplacement spécifié. 🎜
        🎜Filtrage d'image🎜🎜🎜Le filtrage d'image peut être utilisé pour supprimer le bruit de l'image, lisser les images et d'autres opérations. GoCV fournit également de nombreuses fonctions de filtrage que nous pouvons utiliser, notamment GaussianBlur, MedianBlur, BilatéralFilter, etc. Voici un exemple d'utilisation du filtrage gaussien : 🎜rrreee🎜Dans cet exemple, nous utilisons la fonction IMRead pour charger une image en niveaux de gris, puis utilisons la fonction NewMat pour créer une image avec des objets Mat de mêmes dimensions que l'image originale. La fonction de filtre gaussien GaussianBlur est utilisée ici, et le deuxième paramètre est l'objet Mat du résultat de sortie. Le troisième paramètre image.Point{X: 5, Y:5} représente la taille du modèle utilisé pour le filtrage, ici il s'agit d'un rectangle d'une longueur de 5 pixels et d'une largeur de 5 pixels. Enfin, utilisez IMWrite pour enregistrer l'image traitée à l'emplacement spécifié. 🎜
          🎜Segmentation d'images🎜🎜🎜La segmentation d'images est une tâche importante de traitement d'image. Elle peut être utilisée pour des tâches telles que la séparation d'objets cibles et le prétraitement des données pour générer des fonctionnalités spécifiques. GoCV fournit la fonction Canny pour la détection des contours, qui peut être utilisée pour implémenter une segmentation d'image simple. Voici un exemple d'utilisation de la fonction Canny : 🎜rrreee🎜Dans cet exemple, nous utilisons la fonction IMRead pour charger une image en niveaux de gris, puis utilisons la fonction NewMat pour créer une image en niveaux de gris avec des objets Mat de mêmes dimensions que l'image d'origine. La fonction de détection de bord Canny Canny est utilisée ici, et le deuxième paramètre est l'objet Mat du résultat de sortie. Les troisième et quatrième paramètres 100, 200 représentent respectivement les seuils minimum et maximum, qui peuvent être ajustés en fonction des problèmes réels. Enfin, utilisez IMWrite pour enregistrer l'image traitée à l'emplacement spécifié. 🎜🎜Ce qui précède explique comment certaines tâches courantes de traitement d'image sont implémentées dans le langage Go. GoCV fournit de nombreuses excellentes fonctions de traitement d'image et est bien unifié avec d'autres bibliothèques dans les domaines Python et C++. La barrière d'entrée est faible, elle convient donc parfaitement aux débutants. 🎜

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!