我对图像处理很陌生。我想在这张图像中检测到一条特定的线,这是它中间的一条水平线。我想知道如何接近它。这是地图,它已经简化为边缘地图。
发布于 2022-01-26 14:11:21
这里有一个方法。
让我们从以你的形象阅读开始。为此,我们将使用png
库,因此如果您没有安装它,您将首先使用install.packages("png")
。
library(png)
img_link <- "https://i.stack.imgur.com/PygvJ.png"
img <- readPNG(readBin(img_link, "raw", 1e6))
readPNG
函数将图像提取为数组。在这种情况下,数组是360乘371乘4:
dim(img)
#> [1] 360 371 4
这意味着图像是360乘371像素,包含四个通道:红色、蓝色、绿色和阿尔法(透明)。
我们可以通过调用以下方法在任何时候绘制此数组:
plot(as.raster(img))
要找到一条水平红线,我们所需要做的就是查看绿色通道中像素值的行和,它将在目标行急剧下降。
sum_green <- apply(img[,,2], 1, sum)
我们可以绘制这个向量,以确保其中一个行中有一个大的行,就像我们所期望的那样。
plot(sum_green, type = "l")
要得到这一行,我们只需找到最小行和:
target_row <- which.min(sum_green)
target_row
#> [1] 183
所以我们的红线在第183排。为了证明这一点,让我们把第183行图像变成黑色,然后再画一次:
img[target_row, , 1:3] <- 0
plot(as.raster(img))
这看起来是对的。
https://stackoverflow.com/questions/70870621
复制相似问题