在我的实验中,我在平台上振动一个液滴。我把它录制成一个视频,然后把它分割成帧。我正在对每一幅图像进行预成形分析,以检测出最大高度。我遇到过,不知道怎么解决。为了避免错过振动,我开始记录在平台被提升之前。然而,这意味着开始分析将是错误的。附三张照片,它们是如何在平台前、中间和之后升起液滴的。如何创建代码以使分析从最后一个图像开始?



你可以看到一个黑带(平台)出现时,它足够高,从这一点,我想开始分析的图像。知道怎么做吗?
发布于 2020-12-01 16:18:57
您可以查看最后几行的平均值:
import cv2
import numpy as np
# First look at top image
im = cv2.imread('im1.jpg', cv2.IMREAD_GRAYSCALE)
In [4]: np.mean(im, axis=1)
Out[4]:
array([247.975 , 247.43125 , 247.7265625, 247.4 , 247.6734375,
247.215625 , 247.8046875, 247.3515625, 247.840625 , 247.30625 ,
247.7359375, 247.2234375, 247.909375 , 247.5125 , 247.675 ,
247.1359375, 247.6296875, 247.209375 , 247.6734375, 246.971875 ,
247.225 , 246.2 , 247.1890625, 246.7765625, 247.3453125,
246.5234375, 247.021875 , 246.3984375, 247.1640625, 246.534375 ,
247.128125 , 246.5578125, 247.103125 , 246.24375 , 246.7765625,
246.215625 , 246.6296875, 246.0125 , 246.61875 , 245.8796875,
246.2921875, 245.36875 , 246.14375 , 245.325 , 246.115625 ,
245.2296875, 245.8515625, 244.7640625, 245.4890625, 244.7859375,
245.2859375, 244.584375 , 245.503125 , 244.721875 , 245.2671875,
244.253125 , 244.9625 , 244.271875 , 245.0296875, 244.296875 ,
244.8609375, 244.0125 , 244.7265625, 244.028125 , 244.6828125,
243.740625 , 244.44375 , 243.634375 , 244.265625 , 243.459375 ,
244.18125 , 243.634375 , 244.078125 , 242.8640625, 243.884375 ,
242.853125 , 243.70625 , 242.734375 , 243.6734375, 242.703125 ,
243.1078125, 242.0828125, 242.8734375, 242.0203125, 242.796875 ,
241.7375 , 242.5453125, 241.6734375, 242.4765625, 241.359375 ,
241.8078125, 240.9734375, 241.68125 , 240.68125 , 241.5765625,
240.51875 , 241.290625 , 239.8859375, 241.1515625, 240.303125 ,
240.6671875, 239.471875 , 240.6328125, 239.590625 , 240.425 ,
239.2234375, 240.1359375, 238.6109375, 239.83125 , 238.8015625,
239.4890625, 238.109375 , 239.0203125, 237.7515625, 239.03125 ,
237.54375 , 238.8890625, 237.0203125, 238.121875 , 236.7265625,
238.021875 , 236.7765625, 237.4734375, 236.1390625, 237.00625 ,
235.4421875, 236.503125 , 235.16875 , 236.225 , 234.5078125,
235.653125 , 234.2296875, 235.2703125, 233.8703125, 234.7765625,
233.2578125, 234.3015625, 232.8125 , 233.65625 , 232.5765625])
# Now middle image
im = cv2.imread('im2.jpg', cv2.IMREAD_GRAYSCALE)
In [6]: np.mean(im, axis=1)
Out[6]:
array([248.4484375, 247.9515625, 248.3890625, 247.740625 , 248.1921875,
247.784375 , 248.2546875, 247.8 , 248.4859375, 248.1625 ,
248.346875 , 248.0359375, 248.459375 , 248.0578125, 248.3703125,
247.6703125, 248.2484375, 247.7390625, 248.2421875, 247.625 ,
247.8671875, 246.8984375, 247.9203125, 247.4515625, 247.96875 ,
247.4421875, 247.759375 , 247.35625 , 247.6328125, 247.0765625,
247.640625 , 247.03125 , 247.471875 , 246.8921875, 247.425 ,
246.8640625, 247.428125 , 246.6671875, 246.9984375, 246.36875 ,
246.9984375, 246.1828125, 246.840625 , 245.9703125, 246.6703125,
245.76875 , 246.475 , 245.63125 , 246.2546875, 245.38125 ,
245.925 , 245.2734375, 246.0703125, 245.3453125, 245.8375 ,
245.003125 , 245.6484375, 244.921875 , 245.721875 , 245.0171875,
245.4640625, 244.8609375, 245.346875 , 244.4671875, 245.2953125,
244.1890625, 245.0828125, 244.4078125, 245.1140625, 244.3296875,
245.0859375, 244.140625 , 244.8703125, 244.0625 , 244.7203125,
243.7546875, 244.0890625, 243.390625 , 244.2859375, 243.528125 ,
244.146875 , 243.1578125, 243.63125 , 242.7078125, 243.54375 ,
242.50625 , 243.1765625, 242.0296875, 242.85 , 241.7484375,
242.83125 , 241.4703125, 242.359375 , 241.28125 , 241.5578125,
239.6859375, 239.41875 , 236.5140625, 235.7140625, 232.715625 ,
231.453125 , 228.85625 , 228.2890625, 225.70625 , 225.578125 ,
223.128125 , 223.28125 , 221.3203125, 221.275 , 219.3453125,
219.640625 , 217.990625 , 218.0625 , 216.3671875, 216.7203125,
214.6125 , 215.578125 , 214.1921875, 214.5140625, 212.746875 ,
213.4328125, 211.5109375, 212.0515625, 210.2828125, 211.1859375,
209.55625 , 210.04375 , 208.24375 , 208.8765625, 206.9515625,
207.8078125, 205.946875 , 206.3328125, 204.490625 , 205.3 ,
203.3125 , 203.965625 , 202.3953125, 202.3453125, 201.309375 ])
# Now bottom image
In [7]: im = cv2.imread('im3.jpg', cv2.IMREAD_GRAYSCALE)
In [8]: np.mean(im, axis=1)
Out[8]:
array([248.203125 , 247.6140625, 248.059375 , 247.2109375, 247.7140625,
247.165625 , 247.9 , 247.4703125, 247.9765625, 247.4140625,
247.8140625, 247.3265625, 247.978125 , 247.4875 , 247.8921875,
247.2265625, 247.85 , 247.384375 , 247.815625 , 247.034375 ,
247.5046875, 247.021875 , 247.471875 , 247.3234375, 247.55625 ,
246.784375 , 247.315625 , 246.5890625, 247.215625 , 246.6171875,
247.0921875, 246.2375 , 246.8484375, 246.2421875, 246.775 ,
246.1015625, 246.5640625, 245.9515625, 246.359375 , 245.7875 ,
246.221875 , 245.5765625, 246.125 , 245.44375 , 246.003125 ,
245.2921875, 245.78125 , 244.875 , 245.53125 , 244.809375 ,
245.353125 , 244.6875 , 245.2078125, 244.590625 , 245.1921875,
244.6359375, 245.115625 , 244.4421875, 244.909375 , 244.190625 ,
245.00625 , 244.21875 , 244.80625 , 243.8765625, 244.48125 ,
243.6921875, 244.3265625, 243.328125 , 244.221875 , 243.328125 ,
244.3125 , 243.2703125, 244.0359375, 243.1765625, 243.8828125,
242.915625 , 243.578125 , 242.7171875, 243.484375 , 242.4375 ,
243.3546875, 242.1515625, 242.9203125, 241.709375 , 242.7453125,
241.6140625, 242.2765625, 241.053125 , 241.4171875, 238.809375 ,
238.3046875, 235.1765625, 233.91875 , 230.5703125, 229.5609375,
226.9453125, 226.5015625, 224. , 223.8453125, 222.1015625,
221.4171875, 219.3171875, 219.7140625, 217.846875 , 218.2203125,
216.3890625, 217.015625 , 215.3625 , 215.6015625, 214.0890625,
214.909375 , 213.403125 , 213.903125 , 212.0515625, 212.9796875,
211.321875 , 212.3 , 210.8703125, 211.7203125, 209.890625 ,
210.671875 , 209.10625 , 209.9515625, 208.38125 , 209.23125 ,
207.7328125, 208.48125 , 206.71875 , 207.465625 , 205.721875 ,
206.4921875, 204.6359375, 205.0859375, 201.6921875, 199.509375 ,
184.6015625, 164.1765625, 129.8203125, 101.5859375, 92.6609375]) <--- LAST ROWS ARE DARKER发布于 2020-12-01 16:14:27
您没有提到您的准确性要求以及需要处理的边缘框是什么,但是根据您的示例,这应该很简单:
通过将图像阈值化为黑色和明亮的gray-levels.
https://stackoverflow.com/questions/65094067
复制相似问题