golang中的图像image处理之马赛克效果
生活随笔
收集整理的這篇文章主要介紹了
golang中的图像image处理之马赛克效果
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
馬賽克的原理比較簡單,以一個個的顏色塊來平鋪整個圖片,同一個顏色塊使用一種顏色,顏色塊形狀不定,正方形,長方形,六邊形,三角形都可以,而顏色塊中的顏色就根據算法不同而不同。
原圖如下
1、以顏色塊第一個點的顏色作為顏色塊的顏色
func image21() {scale := 7m1, _ := os.Open("./image1.jpg")defer m1.Close()img1, _, _ := image.Decode(m1)img11 := image.NewRGBA(img1.Bounds())for i := 0; i < img1.Bounds().Max.X; i++ {for j := 0; j < img1.Bounds().Max.Y; j++ {if i%scale == 0 && j%scale == 0 {po := img1.At(i, j)for m := 0; m < scale; m++ {for n := 0; n < scale; n++ {img11.Set(i+m, j+n, po)}}}}}f1, _ := os.Create("./image1-21.jpg")defer f1.Close()jpeg.Encode(f1, img11, nil) }中間女生的背部這里效果不太好
2、以顏色塊中心點的顏色作為顏色塊的顏色
func image20() {scale := 7m1, _ := os.Open("./image1.jpg")defer m1.Close()img1, _, _ := image.Decode(m1)img11 := image.NewRGBA(img1.Bounds())x := img1.Bounds().Max.X / scaley := img1.Bounds().Max.Y / scalefor i := 0; i < x; i++ {for j := 0; j < y; j++ {po := img1.At(i*scale+2, j*scale+2)for m := 0; m < scale; m++ {for n := 0; n < scale; n++ {img11.Set(i*scale+m, j*scale+n, po)}}}}f1, _ := os.Create("./image1-20.jpg")defer f1.Close()jpeg.Encode(f1, img11, nil) }3、取顏色塊內隨機像素點最為顏色塊的顏色
func image22() {scale := 7m1, _ := os.Open("./image1.jpg")defer m1.Close()img1, _, _ := image.Decode(m1)img11 := image.NewRGBA(img1.Bounds())for i := 0; i < img1.Bounds().Max.X; i++ {for j := 0; j < img1.Bounds().Max.Y; j++ {if i%scale == 0 && j%scale == 0 {d := rand.Intn(scale)po := img1.At(d+i, d+j)for m := 0; m < scale; m++ {for n := 0; n < scale; n++ {img11.Set(i+m, j+n, po)}}}}}f1, _ := os.Create("./image1-22.jpg")defer f1.Close()jpeg.Encode(f1, img11, nil) }相對而言,這個的效果要好一些。
總結
以上是生活随笔為你收集整理的golang中的图像image处理之马赛克效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机技巧:小米MIUI 14 系统优化超
- 下一篇: 联想-G480-参数