本文将向你展示如何使用 OpenCV 使用 Go 编程语言 (Golang) 和 GoCV 包绘制直线、正方形、圆形和椭圆形对象。
OpenCV是一个主要用于实时计算机视觉的编程函数库。最初由 Intel 开发,然后由 Willow Garage 和 Itseez 提供支持。这个库是跨平台的,可以在开源 Apache 2 许可下免费使用。
除了绘制物体,OpenCV还可以用于人脸检测、运动跟踪等。
GoCV 是Golang语言的一个包,支持 Linux、macOS 和 Windows 上最新版本的 Go 和 OpenCV v4.5.4。GoCV 使 Go 语言成为兼容 OpenCV 生态系统最新发展的“一流”客户端。
GoCV 让 golang 程序员可以访问 OpenCV4 计算机视觉库。
安装 Golang(确保目标操作系统与你的计算机匹配)
安装 OpenCV
有关安装 OpenCV 的指南,你可以打开 GoCV 网站上的文档,网址为:https://gocv.io/
macOS 安装:https://gocv.io/getting-started/macos/
在 Linux 上安装:https://gocv.io/getting-started/linux/
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 除了可以提高图像或视频的图像质量外,还可以用于绘制和写入对象。
打开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
出现一个黑色的空白窗口
新窗口
按键盘上的 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
所以结果会是这样:
要创建的第二个对象是一个正方形。
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
所以结果会是这样:
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
所以结果会是这样的:
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
所以结果会是这样:
https://github.com/apriliantocecep/belajar-gocv
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓