python - 从视频中测量裂纹的增长速度

标签 python opencv image-processing computer-vision video-processing

我的实验涉及对物质施加压力,使该物质最终破裂。裂纹随着时间和施加的压力而扩大。我有一个设置,可以以固定的时间间隔拍摄该物质的照片。

我需要测量裂纹增长的速度。我该怎么做? (我可以用Python编码)。

有没有办法测量裂缝从一帧到另一帧的实时速度或增长速度? enter image description here

Google 云端硬盘链接到拍摄的一系列照片 - https://drive.google.com/open?id=189cv8B4rm3lhSgT6OYfI_aN0Xmqi-tYi

请多多指教。

我根据这个问题的建议尝试了 OpenCV 的洪水填充。但返回的掩码如图所示:

enter image description here

h, w = resized.shape[:2]
mask = np.zeros((h+2, w+2), np.uint8) 
seed = (int(w/2),int(h/2))

# Floodfill from point (0, 0)
num,im,mask,rect = cv2.floodFill(resized, mask, (0,0), (255,0,0), (10,)*3, (10,)*3, floodflags)

我想如果我可以获得包围裂缝的矩形边界框的坐标,我就可以跨帧跟踪它的坐标并测量裂缝的大小并最终测量速度。

我尝试了如下阈值处理:

th, im_th = cv2.threshold(im, 100, 255, cv2.THRESH_BINARY);

这给出: enter image description here

我不确定这是否能让我过滤掉背景并单独在裂缝上绘制一个边界框。请指教。

提前致谢。

最佳答案

根据裂缝形成的速度,您可能不需要视频;无论如何,您可能最终会对每 X 帧进行采样,并丢弃所有额外的帧。您想要的是足够的帧来获得裂缝中的“增量”变化,而又不会获得太多的帧,以免计算成本过高。

  1. 如果您可以仔细控制设置中的照明条件,那么您很幸运!这成为一个非常简单的问题。您可以获取像素的直方图(openCV 有处理此功能的句柄,但 PIL 和 numpy 也有);你应该有两个颜色家族;一种是物质外部的颜色,另一种是由于裂缝中的阴影而产生的偏差。

    您还可以尝试显着增加每个图像/帧的对比度,以获得裂缝的二进制掩模,或运行 edge detector在图像上方。这些技术将产生比原始素材更容易处理的帧。您甚至可以将它们输入到骨架化过程中,以便在 XY 图像坐标中生成基于矢量的线条表示。

  2. 如果您无法控制照明,或者样本的颜色与裂缝相似,您可能需要使用 object detection技术,但不太可能存在现有的“裂纹检测器”,因此您可能需要构建自己的检测器,或者寻找其他检测器作为形成裂纹的颜色和形状的良好代理。

如果可能的话,我强烈建议尝试第一个选项;像素和直方图数学比其他技术容易得多。

关于python - 从视频中测量裂纹的增长速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790467/

相关文章:

android - 在 Android 中使用 OpenCV 从顶部直下 View 进行头部检测

video - 在哪里可以找到面部检测软件、算法等?

iphone - 如何在iPhone应用程序中进行图像编辑?

Python 请求 : Logging into website using POST and Cookies

python - Opencv Python维护零像素

python itertools.combinations 已删除

java - 无法在opencv java中乘以矩阵

matlab - 显示具有非矩形边界的表面

Python 将正确格式化为数组的用户输入转换为 int 数组

python - Django表单和html表单有什么区别