python - 如何使用 OpenCV (python) 检测此图像中的岩石?

标签 python opencv image-processing

我正试图在这张图片中找到不同形状的岩石。

image
(来源:nasa.gov)

我没有从边缘检测中得到任何令人满意的结果。

enter image description here

我确实读过有关 grabcut 的内容,但同样也没有令人满意的内容。关于我应该如何进行的任何想法?

PS - 我的最终目标是用不同的颜色标记图像中的这些岩石。

更新 1: 这是我用于边缘检测的代码。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image1.JPG',0)
edges = cv2.Canny(img,255,255)

plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()

更新 2:我有几张类似的图片,如下图所示,其中的岩石(大)清晰可见。边缘检测再次在图像上产生不令人满意的结果。我只是在寻找可以尝试的方法。如果您建议一种方法,请添加相关链接,我可以在其中阅读更多内容,我是 opencv 的新手。


(来源:nasa.gov)

最佳答案

岩石是图像的一部分,比沙 block 更简单。您可以尝试获取文件的每一行,将其分成小段,然后计算该段的峰度。

Kurtosis是对段中值频率的钟形曲线的“高度”和“宽度”的度量。沙子的峰态明显低于岩石,因为它具有“更宽”的频谱。具有高峰度的片段很可能属于岩石。

因此,这将是确定图像的每条线必须划分成的段的理想长度的问题。这不是一项微不足道的任务,但也不是一项艰巨的任务。您要识别的最小岩石宽度的一半(但至少是一粒沙子宽度的 100 倍)应该可以解决问题。

关于python - 如何使用 OpenCV (python) 检测此图像中的岩石?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35054313/

相关文章:

python - 在不插值的情况下缩小/调整图像大小

python - 比较python中的LBP

python - 使用 Flask 时 PyCUDA 上下文错误

image-processing - RGB 图像的边缘检测器?

python - Pandas 数据框替换

python - 如何反转 numpy.where (np.where) 函数

python - 移动侦测

python - 无法在 CentOS 机器上导入 pandas

Python D-Bus 和 Tkinter 主循环集成

opencv - opencv中的3d到2d转换