Go调用opencv实现图片矫正的代码示例

 更新时间:2023年09月04日 09:59:42   作者:冒泡的肥皂  
这篇文章主要为大家详细介绍了Go调用opencv实现图片矫正的代码示例,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下

图片矫正实现流程

1.获取角度

HoughLines获取角度

HoughLines 返回的是角度,画线坐标点需要计算。[0]像素单位距离 [1]角度;注意问题得到线条有干扰需要控制
HoughLinesPWithParams 返回的是坐标点直接画线

FindContours获取角度

FindContours 得到最大面积轮廓-》得到角度

2.旋转图片

temp2D := gocv.GetRotationMatrix2D(rect.Center, angle, 0.8)
gocv.WarpAffine(reactImg, &desc, temp2D, image.Pt(0, reactImg.Cols()/2))

代码

windowA := gocv.NewWindow("watch")
	defer windowA.Close()
	root := getCurrentAbPathByCaller()
	img1 := gocv.IMRead(root+string(os.PathSeparator)+"tp.jfif", gocv.IMReadColor)
	img2 := gocv.NewMat()
	gocv.Canny(img1, &img2, 80, 160)
	//img3, _ := img2.ToImage()
	/*
			RetrievalExternal 最外侧轮廓
		    RETR_LIST:返回所有轮廓线,不建立等级关系
			RETR_CCOMP :返回所有轮廓,包含两个层级结构
			RETR_TREE :返回所有轮廓,建立完整的层次结构
	*/
	pointVecotr := gocv.FindContours(img2, gocv.RetrievalExternal, gocv.ChainApproxNone)
	gocv.DrawContours(&img1, pointVecotr, -1, color.RGBA{255, 0, 0, 0}, 1)
	maxindex := getMaxArea(pointVecotr)
	react := gocv.BoundingRect(pointVecotr.At(maxindex))
	reactImg := img1.Region(react)
	rect := gocv.MinAreaRect(pointVecotr.At(maxindex))
	points := rect.Points
	for i := 0; i < len(points); i++ {
		fmt.Println("%d %d", points[i].X, points[i].Y)
	}
	//
	line1 := math.Sqrt(math.Pow(float64(points[1].Y-points[0].Y), 2) + math.Pow(float64(points[1].X-points[0].X), 2))
	line2 := math.Sqrt(math.Pow(float64(points[3].Y-points[0].Y), 2) + math.Pow(float64(points[3].X-points[0].X), 2))
	//角度
	var angle = rect.Angle
	if line1 > line2 {
		angle = 90 + angle
	}
	desc := gocv.NewMat()
	/*
	GetAffineTransform 原图像点-》转换后图像点
	*/
	temp2D := gocv.GetRotationMatrix2D(rect.Center, angle, 0.8)
	gocv.WarpAffine(reactImg, &desc, temp2D, image.Pt(0, reactImg.Cols()/2))
	//reactImg := img1.Region(react)
	//gocv.BoxPoints(gocv.MinAreaRect(pointVecotr.At(getMaxArea(pointVecotr))), &img2)
	windowA.IMShow(desc)
	windowA.WaitKey(0)

到此这篇关于Go调用opencv实现图片矫正的代码示例的文章就介绍到这了,更多相关Go opencv图片矫正内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Golang中的各种时间操作

    详解Golang中的各种时间操作

    这篇文章主要介绍了详解Golang中的各种时间操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 一文带你掌握Golang基础之通道

    一文带你掌握Golang基础之通道

    在Java中,多线程之间的通信方式有哪些?记得吗?Java多线程间通信的解决方案有很多种,比如:synchronized。在go中,就一种:通道,文中介绍的非常详细,感兴趣的同学可以参考下
    2023-05-05
  • Golang实现IP地址转整数的方法详解

    Golang实现IP地址转整数的方法详解

    在 Go 语言中,将 IP 地址转换为整数涉及到解析 IP 地址并处理其字节表示,本文给大家介绍了Golang实现IP地址转整数的方法,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-02-02
  • Go语言实现MapReduce的示例代码

    Go语言实现MapReduce的示例代码

    MapReduce是一种备受欢迎的编程模型,它最初由Google开发,用于并行处理大规模数据以提取有价值的信息,本文将使用GO语言实现一个简单的MapReduce,需要的可以参考下
    2023-10-10
  • Go语言利用泛型封装常见的Map操作

    Go语言利用泛型封装常见的Map操作

    Go 语言在 1.18 版本中引入了泛型,这是 Go 语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感兴趣的可以了解下
    2025-02-02
  • Go语言实现常见限流算法的示例代码

    Go语言实现常见限流算法的示例代码

    计数器、滑动窗口、漏斗算法、令牌桶算法是我们常见的几个限流算法,本文将依次用Go语言实现这几个限流算法,感兴趣的可以了解一下
    2023-05-05
  • 浅谈golang的http cookie用法

    浅谈golang的http cookie用法

    本篇文章主要介绍了golang的http cookie用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • HTTP服务压力测试工具及相关术语讲解

    HTTP服务压力测试工具及相关术语讲解

    这篇文章主要为大家介绍了HTTP服务压力测试工具使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Go工具链之代码测试神器go test详解

    Go工具链之代码测试神器go test详解

    这篇文章主要给大家介绍Go 工具链go test,go test 是 Go 工具链中的一个命令,用于编译和运行按照要求编写的 Golang 测试代码,并生成测试报告,感兴趣的同学跟着小编一起来看看本文吧
    2023-07-07
  • go代码实现买房贷款月供计算的方法

    go代码实现买房贷款月供计算的方法

    今天小编就为大家分享一篇关于go代码实现买房贷款月供计算的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04

最新评论