GO语言使用OpenCV,图找图
2023-12-14 10:34:42
GO语言使用OpenCV,图找图
OpenCV可以用于处理数字图像和视频数据,其功能包括图像和视频的读取、写入、显示、变换、滤波、特征提取、目标检测、人脸识别、物体跟踪、相机标定、三维重建、机器学习等。
当今,计算机视觉在各种应用领域中都扮演着重要的角色,如自动驾驶、智能家居、医学影像、机器人视觉等,而OpenCV则作为计算机视觉领域的重要工具之一,为这些应用领域提供了丰富的功能和算法支持。
OpenCV最初由Intel开发,现在已经成为了一个开源项目,其源代码可以免费获取和使用。OpenCV提供了许多计算机视觉中常用的算法和工具,例如:
- 读取和保存图像和视频数据
- 图像和视频的显示、缩放、剪切和旋转等操作
- 直方图均衡化、图像滤波和形态学操作等图像处理技术
- 特征提取和描述符匹配算法,如SIFT和SURF等
- 目标检测和跟踪算法,如Haar Cascade和MeanShift等
- 人脸检测和识别算法,如LBPH和FisherFace等
- 相机标定和三维重建算法,如SfM和PnP等
- 机器学习算法,如SVM、KNN和随机森林等
package main
import (
"fmt"
"github.com/kbinani/screenshot"
"gocv.io/x/gocv"
"image"
"image/color"
"image/jpeg"
"log"
"os"
"time"
)
func saveImage(img *image.RGBA, fileName string) error {
f, err := os.Create(fileName)
if err != nil {
return err
}
defer f.Close()
jpeg.Encode(f, img, nil)
return nil
}
func processScreenshot(tpl gocv.Mat) {
for {
img1, err := screenshot.Capture(0, 0, 800, 600)
if err != nil {
log.Fatal(err)
}
fileName := fmt.Sprintf("D:\\gin_demo\\photo\\demo1\\2.jpg")
err = saveImage(img1, fileName)
if err != nil {
log.Fatal(err)
}
time.Sleep(time.Second)
// 读取源图片和模板图片
img := gocv.IMRead(fileName, gocv.IMReadColor)
if img.Empty() || tpl.Empty() {
panic("无法加载图片")
}
defer img.Close()
// 创建输出结果矩阵
result := gocv.NewMat()
defer result.Close()
// 进行模板匹配
gocv.MatchTemplate(img, tpl, &result, gocv.TmCcoeffNormed, gocv.NewMat())
// 获取匹配结果
_, maxVal, _, maxLoc := gocv.MinMaxLoc(result)
fmt.Println("max correlation value:", maxVal)
// 设定一个阈值,判断是否匹配成功
threshold := float32(0.8)
if maxVal >= threshold {
fmt.Printf("Found template at: %+v\n", maxLoc)
} else {
fmt.Println("Template not found.")
}
// 可以在源图片上标记出模板匹配的位置,这一步,可以删除
if maxVal >= threshold {
rect := image.Rect(maxLoc.X, maxLoc.Y, maxLoc.X+tpl.Cols(), maxLoc.Y+tpl.Rows())
color := color.RGBA{R: 0, G: 0, B: 255, A: 0}
gocv.Rectangle(&img, rect, color, 2)
window := gocv.NewWindow("Template Match")
window.IMShow(img)
// 窗口等待时间
window.WaitKey(1000)
window.Close()
break
}
}
}
func main() {
// 读取模板图片
tpl := gocv.IMRead("D:\\gin_demo\\photo\\demo1\\1.jpg", gocv.IMReadColor)
if tpl.Empty() {
panic("无法加载模板图片")
}
defer tpl.Close()
processScreenshot(tpl)
}
文章来源:https://blog.csdn.net/qq_35583325/article/details/134910968
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!