mirror of
https://github.com/Myzel394/simple-seam-carving-in-go.git
synced 2025-06-18 07:25:30 +02:00
48 lines
973 B
Go
48 lines
973 B
Go
package main
|
|
|
|
import (
|
|
"image"
|
|
"image/color"
|
|
"image/png"
|
|
_ "image/png"
|
|
"os"
|
|
|
|
"myzel394.app/image-stuff/imageutils"
|
|
)
|
|
|
|
func main() {
|
|
// Read image
|
|
reader, _ := os.Open("./assets/surfer.png")
|
|
rawImage, _, _ := image.Decode(reader)
|
|
readImage := imageutils.ImageAnalyzer{Image: rawImage}
|
|
|
|
bounds := readImage.Bounds()
|
|
width := bounds.Max.X
|
|
height := bounds.Max.Y
|
|
writeImage := image.NewRGBA(bounds)
|
|
|
|
seams := imageutils.NewImageSeams()
|
|
seams.CreateSeamsFromRectangle(bounds)
|
|
|
|
// Main action
|
|
for x := range width {
|
|
for y := range height {
|
|
energy := uint(readImage.CalculateEnergyAt(x, y))
|
|
hexColor := uint8(energy)
|
|
|
|
color := color.RGBA{hexColor, hexColor, hexColor, 255}
|
|
writeImage.Set(x, y, color)
|
|
|
|
seams.SetCostForNode(x, y, energy)
|
|
}
|
|
}
|
|
|
|
seams.CreateOptimizedRoutes()
|
|
lowestSeam := seams.GetLowestSeam()
|
|
lowestSeam.WriteSeamChainToImage(writeImage)
|
|
|
|
// Out image
|
|
writer, _ := os.Create("image.png")
|
|
png.Encode(writer, writeImage)
|
|
}
|