最近,我一直对机器学习感兴趣,尤其是对图像的机器学习,但是要做到这一点,我需要能够处理图像。我想对图像处理库在此过程中的工作方式有更全面的了解,因此我决定创建自己的库来读取我能理解的图像。但是,在读取图像的 大小 时似乎遇到了一个问题,因为在尝试编译时会弹出此错误:
./imageProcessing.go:33:11: non-constant array bound Size
这是我的代码:
package main import ( // "fmt" // "os" ) // This function reads a dimension of an image you would use it like readImageDimension("IMAGENAME.PNG", "HEIGHT") func readImageDimension(path string, which string) int{ var dimensionyes int if(which == "" || which == " "){ panic ("You have not entered which dimension you want to have.") } else if (which == "Height" || which == "HEIGHT" || which == "height" || which == "h" || which =="H"){ //TODO: Insert code for reading the Height of the image return dimensionyes } else if (which == "Width" || which == "WIDTH" || which == "width" || which == "w" || which =="W"){ //TODO: Insert code for reading the Width of the image return dimensionyes } else { panic("Dimension type not recognized.") } } func addImage(path string, image string, Height int, Width int){ var Size int Size = Width * Height var Pix [Size][3]int } func main() { }
我刚刚开始使用Go进行编程,所以很抱歉,如果这个问题听起来不行,
因为Go是一种静态类型的语言,这意味着需要在编译时知道变量的类型。
Go中的数组是固定大小的:在Go中创建数组后,以后就无法更改其大小。这是这样一种程度,即一个阵列的长度是阵列类型的一部分(这意味着类型[2]int和[3]int2层不同的类型)。
[2]int
[3]int
通常在编译时不知道变量的值,因此使用该变量的值作为数组长度,在编译时将不知道类型,因此不允许使用。
如果您在编译时不知道大小,请使用切片而不是数组(还有其他原因使用切片)。
例如此代码:
func addImage(path string, image string, Height int, Width int){ var Size int Size = Width * Height var Pix [Size][3]int // use Pix }
可以转换为创建和使用像这样的切片:
func addImage(path string, image string, Height int, Width int){ var Size int Size = Width * Height var Pix = make([][3]int, Size) // use Pix }