使用 Go (Golang) 使用 OpenCV 绘制对象 GoCV

本文将向你展示如何使用 OpenCV 使用 Go 编程语言 (Golang) 和 GoCV 包绘制直线、正方形、圆形和椭圆形对象。

58060c21713860f4221a86b0948293ec.png

OpenCV是一个主要用于实时计算机视觉的编程函数库。最初由 Intel 开发,然后由 Willow Garage 和 Itseez 提供支持。这个库是跨平台的,可以在开源 Apache 2 许可下免费使用。

除了绘制物体,OpenCV还可以用于人脸检测、运动跟踪等。

GoCV 是Golang语言的一个包,支持 Linux、macOS 和 Windows 上最新版本的 Go 和 OpenCV v4.5.4。GoCV 使 Go 语言成为兼容 OpenCV 生态系统最新发展的“一流”客户端。

GoCV 让 golang 程序员可以访问 OpenCV4 计算机视觉库。

要求

  1. 安装 Golang(确保目标操作系统与你的计算机匹配)

  2. 安装 OpenCV

安装 OpenCV

有关安装 OpenCV 的指南,你可以打开 GoCV 网站上的文档,网址为:https://gocv.io/

  1. macOS 安装:https://gocv.io/getting-started/macos/

  2. 在 Linux 上安装:https://gocv.io/getting-started/linux/

  3. Windows 安装程序:https://gocv.io/getting-started/windows/

或者你可以在此处(https://opencv.org/)访问官方网站。我们使用 MacOs 操作系统。

创建项目

首先,让我们使用以下命令创建一个新项目:

mkdir belajar-gocv
cd belajar-gocv

然后使用以下命令创建一个模块:

go mod init belajar-gocv

使用另一个 IDE 或编辑器打开项目,例如 VSCode。在根目录中创建一个名为main.go的文件,接下来我们将创建一个绘制对象的函数。

package main

func main() {
  // buat canvas
}

安装库

安装包 GoCV

go get -u -d gocv.io/x/gocv

使用 OpenCV 绘制对象

使用 OpenCV 除了可以提高图像或视频的图像质量外,还可以用于绘制和写入对象。

创建画布

打开main.go然后在 main 函数中更改/添加以下代码:

package main

import "gocv.io/x/gocv"

func main() {
 // membuat window baru
 window := gocv.NewWindow("Belajar Gambar Objek")
 defer window.Close()

 // membuat canvas
 width := 640
 height := 480
 canvas := gocv.NewMatWithSize(width, height, gocv.MatTypeCV8UC3)

 // loop
 for {
  // tampilkan canvas di window
  window.IMShow(canvas)

  // wait key to press
  if window.WaitKey(10) >= 0 {
   break
  }
 }
}

尝试使用以下命令运行上面的代码:

go run main.go

出现一个黑色的空白窗口

eddceeced6cae5b7f4c9c7d2b0b6e689.png

新窗口

按键盘上的 esc 键关闭窗口。

制作颜色

首先我们准备要在对象上使用的颜色。打开main.go在创建画布后添加以下行

// membuat canvas
...

// membuat warna
 red := color.RGBA{255, 0, 0, 0}
 green := color.RGBA{0, 255, 0, 0}
 blue := color.RGBA{0, 0, 255, 0}
 purple := color.RGBA{106, 90, 205, 0}

// loop
...
画线

成功创建画布后,接下来我们尝试用线(line)绘制画布。在画线之前,我们必须了解画线所用的函数和属性。用来画线的函数结构和属性如下:

gocv.Line(img *gocv.Mat, pt1 image.Point, pt2 image.Point, c color.RGBA, thickness int)
  • img = 用于指定使用内存地址引用绘制线条的位置

  • pt1 = (x1, y1) 创建线的第一个点的起始坐标

  • pt2 = (x2, y2) 结束坐标创建直线的终点

  • c = (color) 一个介于 0-255 之间的值,用于创建 RGBA 颜色

  • thickness=线宽

打开 main.go 并添加以下行:

// membuat canvas
...

// membuat warna
...

// membuat garis
 gocv.Line(&canvas, image.Pt(100, 150), image.Pt(300, 400), red, 1)

// loop
...

尝试使用以下命令运行上面的代码:

go run main.go

所以结果会是这样:

41191ebaf1b462127a8e96bf0981bf12.png
创建一个正方形

要创建的第二个对象是一个正方形。

gocv.Rectangle(img *gocv.Mat, r image.Rectangle, c color.RGBA, thickness int)
  • img:用于通过引用其内存地址来指定矩形将在何处绘制

  • r = (x0, y0, x1, y1) :x0和y0是正方形左上角的坐标,x1和y1是正方形右下角的坐标

  • c = (color) :一个介于 0-255 之间的值,用于创建 RGBA 颜色

  • thickness:线宽

打开main.go并添加以下行:

// membuat canvas
...
// membuat warna
...
// membuat garis
...
// membuat persegi
 gocv.Rectangle(&canvas, image.Rect(150, 200, 350, 400), green, 2)
// loop
...

尝试使用以下命令运行上面的代码:

go run main.go

所以结果会是这样:

9c556fc8c08f8e7239046bc8987f69dd.png
创建一个圆
gocv.Circle(img *gocv.Mat, center image.Point, radius int, c color.RGBA, thickness int)
  • img = 用于指定使用其内存地址引用绘制圆的位置

  • center = (x, y) 表示圆在x和y轴上的圆心

  • radius = 表示圆的半径(面积)

  • c = (color) 一个介于 0-255 之间的值,用于创建 RGBA 颜色

  • thickness = 线宽(-1 表示填充所有空格)

打开main.go并添加以下行:

// membuat canvas
...
// membuat warna
...
// membuat garis
...
// membuat persegi
...
// membuat lingkaran
 gocv.Circle(&canvas, image.Pt(220, 250), 80, blue, -1)
// loop
...

尝试使用以下命令运行上面的代码:

go run main.go

所以结果会是这样的:

cca959cb0d77c2edf57179c974360b3b.png
创建一个椭圆
gocv.Ellipse(img *gocv.Mat, center image.Point, axes image.Point, angle float64, startAngle float64, endAngle float64, c color.RGBA, thickness int)
  • center = (x, y) 椭圆中点的坐标

  • axes = (minorAxes, majorAxes) = 短轴和长轴的长度

  • angel = rotation,椭圆的旋转角度是逆时针计算的

  • startAngle = 开始角度(顺时针数)

  • endAngel = 结束角度(顺时针数)

  • c = (color) 一个介于 0-255 之间的值,用于创建 RGBA 颜色

  • thickness = 线宽

打开main.go并添加以下行:

// membuat canvas
...
// membuat warna
...
// membuat garis
...
// membuat persegi
...
// membuat lingkaran
...
// membuat ellips
 gocv.Ellipse(&canvas, image.Pt(300, 500), image.Pt(100, 50), 45, 130, 270, purple, 4)
// loop
...

尝试使用以下命令运行上面的代码:

go run main.go

所以结果会是这样:

fef7c109217b8dbab180031d361dc965.png
源代码
  • https://github.com/apriliantocecep/belajar-gocv

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

3cf39573b1b37ca2509cbb8d1859a9d4.jpeg

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年11月13日
下一篇 2023年11月13日

相关推荐