gocv.Mat类型和image.Image互相转化

1. image.Image转gocv.Mat

func cvtImageToMat(img image.Image) (gocv.Mat, error) {
	bounds := img.Bounds()
	x := bounds.Dx()
	y := bounds.Dy()
	bytes := make([]byte, 0, x*y*3)

	for j := bounds.Min.Y; j < bounds.Max.Y; j++ {
		for i := bounds.Min.X; i < bounds.Max.X; i++ {
			r, g, b, _ := img.At(i, j).RGBA()
			bytes = append(bytes, byte(b>>8), byte(g>>8), byte(r>>8))
		}
	}
	return gocv.NewMatFromBytes(y, x, gocv.MatTypeCV8UC3, bytes)
}

2. gocv.Mat转image.Image

/*
	Parameters:
		mat: gocv.Mat,原图像
		format: string,要转换的类型格式,比如.png .jpeg
	Returns:
		img: image.Image 转换之后的图像
		err: error
*/
func cvtMatToImage(mat gocv.Mat, format string) (img image.Image, err error) {
	// 把mat转成字节,指定图片格式format
	buf, err := gocv.IMEncode(gocv.FileExt(format), mat)
	if err != nil {
		return nil, err
	}
	// 根据图片的字节,创建出reader
	reader := bytes.NewReader(buf)
	// 解码,将字节解码成图片
	dest, _, err := image.Decode(reader)
	if err != nil {
		return nil, err
	}
	return dest, err
}

调用:

func main() {
	src := gocv.IMRead("Blue.jpg", gocv.IMReadColor)
	if src.Empty() {
		log.Println("failed to load image")
		return
	}
	img, err := cvtMatToImage(src, ".jpeg")
	if err != nil {
		log.Println(err)
		return
	}
}

后来才发现,,,gocv.Mat转image.Image有直接调用ToImage()方法就可以了,:在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值