I’m new to Julia. I was trying to execute center = component_centroids(cq)[2:end]
where cq
is of type Matrix{Int32}
, but got the following error:
MethodError: no method matching component_centroids(::Matrix{Int32})
Closest candidates are:
component_centroids(!Matched::AbstractArray{Int64, N}) where N
@ ImageMorphology C:\Users\whoever\.julia\packages\ImageMorphology\1lEjs\src\connected.jl:247
So I have to write center = component_centroids(Int64.(cq))[2:end]
instead. However, I looked into the source code of component_centroids
and found no sign that Int64
is necessary. The source code is provided below for convenience:
"`component_centroids(labeled_array)` -> an array of centroids for each label, including the background label 0"
function component_centroids(img::AbstractArray{Int,N}) where {N}
len = length(0:maximum(img))
n = fill(zero(CartesianIndex{N}), len)
counts = fill(0, len)
@inbounds for I in CartesianIndices(size(img))
v = img[I] + 1
n[v] += I
counts[v] += 1
end
return map(v -> n[v].I ./ counts[v], 1:len)
end
I’m not sure if this is a bug or there’s something I misunderstood.