Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为什么不是';是否覆盖数组值?_Arrays_Image Processing_Julia_Global - Fatal编程技术网

Arrays 为什么不是';是否覆盖数组值?

Arrays 为什么不是';是否覆盖数组值?,arrays,image-processing,julia,global,Arrays,Image Processing,Julia,Global,我用一个名为contourCrop()的函数裁剪了一个图像数组,但当我尝试使用循环更改数组的各个值时,这些值保持不变。例如,mat2[122411]的值仍然是0.027450980392156862,即使该值小于0.2。奇怪的是,如果我改变全局mat2[r,c]=0到类似于全局mat2[r,c]=200数组元素不会改变,但是如果我使用imshow()显示图像,图像会改变。有没有一种简单的方法可以手动更改图像的数组值 img = load("C:\\Users\\josep\\Downl

我用一个名为
contourCrop()
的函数裁剪了一个图像数组,但当我尝试使用循环更改数组的各个值时,这些值保持不变。例如,
mat2[122411]
的值仍然是0.027450980392156862,即使该值小于0.2。奇怪的是,如果我改变
全局mat2[r,c]=0到类似于
全局mat2[r,c]=200
数组元素不会改变,但是如果我使用
imshow()
显示图像,图像会改变。有没有一种简单的方法可以手动更改图像的数组值

img = load("C:\\Users\\josep\\Downloads\\archive\\no\\2 no.jpeg");
imgg = Gray.(img);
mat = convert(Array{Float64}, imgg);

mat2 = contourCrop(mat);


for r in size(mat2, 1), c in size(mat2, 2)
    if mat2[r, c] < 0.2
        global mat2[r, c] = 0;
    end
end

println(mat2[122, 411]);
img=load(“C:\\Users\\josep\\Downloads\\archive\\no\\2 no.jpeg”);
imgg=灰色(img);
mat=转换(数组{Float64},imgg);
mat2=等高作物(mat);
尺寸为r(mat2,1),尺寸为c(mat2,2)
如果mat2[r,c]<0.2
全局mat2[r,c]=0;
结束
结束
println(mat2[122411]);

您的问题可能是
size
给出的是一个整数,而不是一个范围,因此
对于r的大小(mat2,1)
只迭代一个值。您可以编写
1:size(mat2,1)
,或者更好地使用

julia> mat2 = randn(2,5)
2×5 Array{Float64,2}:
  0.426329   0.153334   2.50947   0.669216  -0.51994
 -1.08846   -1.16639   -0.786405  0.451461  -1.893

julia> for r in axes(mat2, 1), c in axes(mat2, 2)
           if mat2[r, c] < 0.2
               mat2[r, c] = 0;
           end
       end

julia> mat2
2×5 Array{Float64,2}:
 0.426329  0.0  2.50947  0.669216  0.0
 0.0       0.0  0.0      0.451461  0.0
julia>mat2=randn(2,5)
2×5数组{Float64,2}:
0.426329   0.153334   2.50947   0.669216  -0.51994
-1.08846   -1.16639   -0.786405  0.451461  -1.893
julia>对于轴中的r(mat2,1),轴中的c(mat2,2)
如果mat2[r,c]<0.2
mat2[r,c]=0;
结束
结束
朱莉娅>马特2
2×5数组{Float64,2}:
0.426329  0.0  2.50947  0.669216  0.0
0.0       0.0  0.0      0.451461  0.0

或者更好,编写
mat2.=mat2.*(mat2.<0.2)
或类似
map的东西!(x->x您的问题可能是
size
给出了一个整数,而不是一个范围,因此
对于r的大小(mat2,1)
只迭代一个值。您可以编写
1:size(mat2,1)
,或者更好,使用

julia> mat2 = randn(2,5)
2×5 Array{Float64,2}:
  0.426329   0.153334   2.50947   0.669216  -0.51994
 -1.08846   -1.16639   -0.786405  0.451461  -1.893

julia> for r in axes(mat2, 1), c in axes(mat2, 2)
           if mat2[r, c] < 0.2
               mat2[r, c] = 0;
           end
       end

julia> mat2
2×5 Array{Float64,2}:
 0.426329  0.0  2.50947  0.669216  0.0
 0.0       0.0  0.0      0.451461  0.0
julia>mat2=randn(2,5)
2×5数组{Float64,2}:
0.426329   0.153334   2.50947   0.669216  -0.51994
-1.08846   -1.16639   -0.786405  0.451461  -1.893
julia>对于轴中的r(mat2,1),轴中的c(mat2,2)
如果mat2[r,c]<0.2
mat2[r,c]=0;
结束
结束
朱莉娅>马特2
2×5数组{Float64,2}:
0.426329  0.0  2.50947  0.669216  0.0
0.0       0.0  0.0      0.451461  0.0

或者更好的方法是编写
mat2.=mat2.*(mat2.<0.2)
或类似
map!(x->xI使用VSCode执行以下文件:

using Images
using TestImages

function contourCrop(img::Array{T,2}) where {T}
    return img[1:1000,1:1000]
end

img = testimage("earth_apollo17")
imgg = Gray.(img)
mat = convert(Array{Float64}, imgg)

mat2 = contourCrop(mat)
mat2[122, 411] = 0.027450980392156862

for r in size(mat2, 1), c in size(mat2, 2)
    println("r: $r, c: $c")
    if mat2[r,c] < 0.2
        global mat2[r,c] = 0;
    end
end

println(mat2[122, 411])
正如您所看到的,您并没有迭代r和c的所有值,而是迭代了(r=1000,c=1000)处的最后一个像素

让我们先修复循环

for r in 1:size(mat2, 1), c in 1:size(mat2, 2)
    #println("r: $r, c: $c")
    if mat2[r,c] < 0.2
        global mat2[r,c] = 0;
    end
end

println(mat2[122, 411])
这里有一种更好的方法可以遍历图像:

for I in CartesianIndices(mat2)
    #println("r: $(I[1]), c: $(I[2])")
    global mat2
    if mat2[I] < 0.2
        mat2[I] = 0;
    end
end

println(mat2[122, 411])
Cartesianindice(mat2)中I的

#println(“r:$(I[1]),c:$(I[2]))
全球mat2
如果mat2[I]<0.2
mat2[I]=0;
结束
结束
println(mat2[122411])

我使用VSCode在文件中执行了以下操作:

using Images
using TestImages

function contourCrop(img::Array{T,2}) where {T}
    return img[1:1000,1:1000]
end

img = testimage("earth_apollo17")
imgg = Gray.(img)
mat = convert(Array{Float64}, imgg)

mat2 = contourCrop(mat)
mat2[122, 411] = 0.027450980392156862

for r in size(mat2, 1), c in size(mat2, 2)
    println("r: $r, c: $c")
    if mat2[r,c] < 0.2
        global mat2[r,c] = 0;
    end
end

println(mat2[122, 411])
正如您所看到的,您并没有迭代r和c的所有值,而是迭代了(r=1000,c=1000)处的最后一个像素

让我们先修复循环

for r in 1:size(mat2, 1), c in 1:size(mat2, 2)
    #println("r: $r, c: $c")
    if mat2[r,c] < 0.2
        global mat2[r,c] = 0;
    end
end

println(mat2[122, 411])
这里有一种更好的方法可以遍历图像:

for I in CartesianIndices(mat2)
    #println("r: $(I[1]), c: $(I[2])")
    global mat2
    if mat2[I] < 0.2
        mat2[I] = 0;
    end
end

println(mat2[122, 411])
Cartesianindice(mat2)中I的

#println(“r:$(I[1]),c:$(I[2]))
全球mat2
如果mat2[I]<0.2
mat2[I]=0;
结束
结束
println(mat2[122411])

这就解决了问题。谢谢你指出这一点。我以为我快疯了,但我忽略了一些简单的东西。我尝试一下,你建议的代码看起来更优雅了。这就解决了问题。谢谢你指出这一点。我以为我快疯了,但我忽略了一些简单的东西。你建议的代码看起来更优雅了我试试看。