Golang中gocv的normalize函数使用方法
Golang中gocv的normalize函数使用方法 大家好,我在使用 gocv 的 Normalize 函数时遇到了问题。文档中该函数的定义如下。
func Normalize(src Mat, dst *Mat, alpha float64, beta float64, typ NormType)
我在代码中调用它,但得到了一个段错误。你能帮我修复这个调用吗?
package main
import (
"./imageprocessing"
"gocv.io/x/gocv"
// "fmt"
)
/** CovarFlags
// CovarScrambled indicates to scramble the results.
CovarScrambled CovarFlags = 0
// CovarNormal indicates to use normal covariation.
CovarNormal CovarFlags = 1
// CovarUseAvg indicates to use average covariation.
CovarUseAvg CovarFlags = 2
// CovarScale indicates to use scaled covariation.
CovarScale CovarFlags = 4
// CovarRows indicates to use covariation on rows.
CovarRows CovarFlags = 8
// CovarCols indicates to use covariation on columns.
CovarCols CovarFlags = 16
**/
func main() {
var size int
var normtype gocv.NormType = gocv.NormMinMax
size = imageprocessing.FolderLength("./imageprocessing/Images/danger")
Images := make([]gocv.Mat,size)
GLCMs := make([]gocv.Mat,size)
normalizedGLCMs := make([]gocv.Mat,size)
means := make([]gocv.Mat,size)
imageprocessing.ReadFolder(Images,"./imageprocessing/Images/danger",true,false,false)
//GroupGLCM(Images []gocv.Mat, GLCMs []gocv.Mat, means []gocv.Mat, show bool)
imageprocessing.GroupGLCM(Images, GLCMs, means, false)
//func Normalize(src Mat, dst *Mat, alpha float64, beta float64, typ NormType)
//min value of dst is alpha and max value of dst is beta
for i := 0; i < size; i++ {
gocv.Normalize(GLCMs[i], &normalizedGLCMs[i], 0.0, 255.0, normtype )
//imageprocessing.ShowImage("normalizedGLCMs", normalizedGLCMs[i], 100)
}
}
更多关于Golang中gocv的normalize函数使用方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于Golang中gocv的normalize函数使用方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在调用 gocv.Normalize 时出现段错误,通常是因为目标矩阵 dst 没有正确初始化。gocv.Normalize 要求目标矩阵必须是已分配内存的有效矩阵。以下是修复后的代码示例:
package main
import (
"gocv.io/x/gocv"
)
func main() {
// 假设这是你的GLCM矩阵
src := gocv.NewMat()
defer src.Close()
// 目标矩阵必须初始化
dst := gocv.NewMat()
defer dst.Close()
// 正确调用Normalize
gocv.Normalize(src, &dst, 0.0, 255.0, gocv.NormMinMax)
}
在你的具体代码中,需要确保 normalizedGLCMs 切片中的每个矩阵都已初始化:
// 初始化normalizedGLCMs切片中的每个矩阵
normalizedGLCMs := make([]gocv.Mat, size)
for i := 0; i < size; i++ {
normalizedGLCMs[i] = gocv.NewMat()
}
// 现在可以安全调用Normalize
for i := 0; i < size; i++ {
gocv.Normalize(GLCMs[i], &normalizedGLCMs[i], 0.0, 255.0, normtype)
}
// 使用完毕后记得释放资源
defer func() {
for i := 0; i < size; i++ {
normalizedGLCMs[i].Close()
}
}()
如果 GLCMs[i] 是空矩阵或无效,也会导致段错误。确保 imageprocessing.GroupGLCM 正确填充了 GLCMs 切片:
// 在调用Normalize前检查矩阵是否有效
for i := 0; i < size; i++ {
if GLCMs[i].Empty() {
// 处理空矩阵情况
continue
}
gocv.Normalize(GLCMs[i], &normalizedGLCMs[i], 0.0, 255.0, normtype)
}
完整修复示例:
func main() {
var normtype gocv.NormType = gocv.NormMinMax
size := imageprocessing.FolderLength("./imageprocessing/Images/danger")
Images := make([]gocv.Mat, size)
GLCMs := make([]gocv.Mat, size)
normalizedGLCMs := make([]gocv.Mat, size)
means := make([]gocv.Mat, size)
// 初始化所有目标矩阵
for i := 0; i < size; i++ {
normalizedGLCMs[i] = gocv.NewMat()
}
imageprocessing.ReadFolder(Images, "./imageprocessing/Images/danger", true, false, false)
imageprocessing.GroupGLCM(Images, GLCMs, means, false)
for i := 0; i < size; i++ {
if !GLCMs[i].Empty() {
gocv.Normalize(GLCMs[i], &normalizedGLCMs[i], 0.0, 255.0, normtype)
}
}
// 清理资源
defer func() {
for i := 0; i < size; i++ {
Images[i].Close()
GLCMs[i].Close()
normalizedGLCMs[i].Close()
means[i].Close()
}
}()
}

