Golang在图像中绘制矩形框的示例代码

 更新时间:2024年04月02日 09:52:02   作者:Digital2Slave  
这篇文章主要介绍了Golang在图像中绘制矩形框的示例代码,文中有详细的代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下

Golang 在图像中绘制矩形框

从获取的坐标信息,在图像中绘制矩形框,并添加标注信息。

1. 依赖

  • 字体 simsun.ttc
  • 第三方库 github.com/fogleman/gg

2. 源码

package main

import (
	"encoding/json"
	"fmt"
	"image"
	"image/color"
	"image/draw"
	"log"
	"math"
	"reflect"
	"strings"

	"github.com/fogleman/gg"
)

// test_draw_rect_text 画图像矩形, 标注, 颜色; 返回保存图像路径
// ref: https://github.com/fogleman/gg/blob/master/examples/rotated-image.go
func test_draw_rect_text(im_path, font_path, detect_label, save_path string, x, y, w, h float64) {
	// Load image
	im, err := gg.LoadImage(im_path)
	if err != nil {
		log.Fatal(err)
	}

	// 1 method
	// iw, ih := im.Bounds().Dx(), im.Bounds().Dy()
	// Set Context
	// dc := gg.NewContext(iw, ih)

	// Draw image
	// dc.DrawImage(im, 0, 0)

	// 2 method
	dc := gg.NewContextForImage(im)

	// Set color and line width
	dc.SetHexColor("#FF0000")
	dc.SetLineWidth(1)

	// Draw rectangle
	dc.DrawRoundedRectangle(x, y, w, h, 0)
	// Store set
	dc.Stroke()

	// Set font and draw label
	var font_height float64 = 7
	if err := dc.LoadFontFace(font_path, font_height); err != nil {
		panic(err)
	}
	rect_center_x := x + w/2
	rect_center_y := y + h/2
	dc.DrawStringAnchored(detect_label, rect_center_x, rect_center_y, 0.5, 0.5)
	dc.Clip()

	// Save png image
	dc.SavePNG(save_path)
}

func main() {
	im_path := "/home/tianzx/Pictures/lena.jpeg"
	font_path := "/home/tianzx/ai_model/simsun.ttc"
	detect_label := "缺角/碎裂"
	save_path := "/home/tianzx/Pictures/lena_test.png"
	var x, y, w, h float64 = 50, 100, 50, 50
	test_draw_rect_text(im_path, font_path, detect_label, save_path, x, y, w, h)
}

3. 结果

lena.jpeg

lena_test

4. 说明

导入的Golang第三方库,并不是都使用了,按需进行删减。

到此这篇关于Golang在图像中绘制矩形框的示例代码的文章就介绍到这了,更多相关Golang绘制矩形框内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go 面向包新提案透明文件夹必要性分析

    Go 面向包新提案透明文件夹必要性分析

    这篇文章主要为大家介绍了Go 面向包新提案,透明文件夹必要性分析,看看是否合适加进 Go 特性中,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • golang中一种不常见的switch语句写法示例详解

    golang中一种不常见的switch语句写法示例详解

    这篇文章主要介绍了golang中一种不常见的switch语句写法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Go打印结构体提升代码调试效率实例详解

    Go打印结构体提升代码调试效率实例详解

    这篇文章主要介绍了Go打印结构体提升代码调试效率实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • Go Slice扩容的这些坑你踩过哪些

    Go Slice扩容的这些坑你踩过哪些

    这篇文章主要为大家详细介绍了Golang中对切片Slice的append操作时会遇到的踩坑经验分享,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-03-03
  • golang字符串转Time类型问题

    golang字符串转Time类型问题

    本文主要介绍了golang字符串转Time类型问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Go JSON编码与解码的实现

    Go JSON编码与解码的实现

    这篇文章主要介绍了Go JSON编码与解码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Golang 并发下的问题定位及解决方案

    Golang 并发下的问题定位及解决方案

    由于 gin-swagger 是并发执行的, 输出的日志本身是错位,这就导致无法定义是哪一个结构体缺少 tag 导致的,这篇文章主要介绍了Golang 并发下的问题定位及解决方案,需要的朋友可以参考下
    2022-03-03
  • 浅析go中Ticker,Timer和Tick的用法与区别

    浅析go中Ticker,Timer和Tick的用法与区别

    在go面试的时候,面试官经常会问time包的Ticker,Timer以及Tick的区别,一般在超时控制的时候用的比较多,今天就跟随小编一起来详细学一下这几个的区别吧
    2023-10-10
  • go使用Gin框架利用阿里云实现短信验证码功能

    go使用Gin框架利用阿里云实现短信验证码功能

    这篇文章主要介绍了go使用Gin框架利用阿里云实现短信验证码,使用json配置文件及配置文件解析,编写路由controller层,本文通过代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • Go语言基础模板设计模式示例详解

    Go语言基础模板设计模式示例详解

    这篇文章主要为大家介绍了Go语言基础设计模式之模板模式的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11

最新评论