# How can I find the elapsed time between two images from video file with matlab.

8 次查看（过去 30 天）
bykado 2023-6-5

How can I find the elapsed time between two images from video file with matlab.
I drop a drop of water on a surface. I want to find the water absorption time of the surface from the video I recorded with MATLAB. Can you help me? I don't know much about Matlab.

### 采纳的回答

J 2023-6-5

To find the elapsed time between two images from a video file in MATLAB, you will need to follow these steps:
1. Read in the video file using the VideoReader function.
video = VideoReader('your_video_file.mp4');
2. Extract two frames from the video.
frame1 = read(video, frame_number_1);
frame2 = read(video, frame_number_2);
3. Convert the frames to grayscale.
gray1 = rgb2gray(frame1);
gray2 = rgb2gray(frame2);
4. Calculate the absolute difference between the two grayscale frames.
diff = abs(double(gray1) - double(gray2));
5. Threshold the difference image to focus only on the region where the water has been absorbed.
threshold = 50; % adjust as necessary
diff_threshold = diff > threshold;
6. Calculate the total number of pixels in the thresholded difference image.
num_pixels = numel(diff_threshold);
7. Calculate the number of pixels in the thresholded difference image that are white.
num_white_pixels = sum(diff_threshold(:));
8. Calculate the percentage of white pixels.
percentage_white_pixels = num_white_pixels / num_pixels * 100;
9. Calculate the time interval between the two frames using the timestamps of the frames:
time1 = video.Timestamps(frame_number_1);
time2 = video.Timestamps(frame_number_2);
time_interval = time2 - time1;
disp(time_interval);
10.Repeat steps 2-9 for each pair of frames that you want to analyze, and use the percentage of white pixels to estimate the water absorption time of the surface.
Note that this method assumes that the water absorption process appears as a significant increase in brightness in the region in which it occurs. If the water absorption process appears differently in your video, you may need to use a different method to analyze it. Note that you must give all your paths(video) correctly and this should work. Thanks!
##### 4 个评论显示 3更早的评论隐藏 3更早的评论
Walter Roberson 2023-6-5
There is a File Exchange Contribution named videofig that is very useful for playing videos with customized behaviour -- so you could use it to design an interface that played the video but reacted to WindowButtonPress callback for example.

### 更多回答（3 个）

Walter Roberson 2023-6-5
Unfortunately, none of the common video formats record absolute time for frames.
If you are using videoreader() then you can use the CurrentTime property https://www.mathworks.com/help/matlab/ref/videoreader.html#busqe2j-3 to find the time offset relative to the beginning of the file. However, there is no recorded start time.
(In some cases, for some video file formats, there is the possibility that someone deliberately recorded the start time in a file header; if so it is not trivial to retrieve; see https://superuser.com/questions/1036704/is-there-something-like-exif-for-video
Note that you should definitely not the creation time or file modification time stored by the file system for the video file; those can get changed fairly easily. If you are lucky, whatever created the files might have recorded the start time as part of the file name -- but there would be variable delays between fetching the time and creating the file and starting to write frames to it, so even if that happened, it is doubtful that the accuracy would be good enough for the kind of calculation that you want to do.
##### 2 个评论显示 1更早的评论隐藏 1更早的评论
bykado 2023-6-5

from a single video file

bykado 2023-6-6

I've come a long way with these codes. However, I got stuck at one point. I didn't work hard. I want to plot a graph after 10 measurements, but it doesn't work. The graphics window opens, but immediately the video starts playing in that window. I can't get the chart. The video freezes in the previous window. In fact, although the video freezes in the first window, the video does not appear in the graphic pop-up window. when i click on the first frozen window (when active) the video plays in that window this time. How can i solve this problem. I am using MATLAB R2015a version. Thanks...
from a single video file
% Video dosyasını aç
video = VideoReader('C:\som\droptest.mp4');
% İlk tıklama zamanını ve süreyi saklamak için değişkenler
t1 = 0;
dt = 0;
sayac = 0;
% Videoyu oynatın
figure('Name', 'Damla Testi Video');
while hasFrame(video)
frame = readFrame(video);
imshow(frame);
drawnow;
% Mouse tıklama işlevi
set(gcf, 'WindowButtonDownFcn', @mmouseClickCallback);
% Geçen süre tıklamadan sonra videonun devam etmesini sağlamak için kontrol
if dt > 0
pause(dt);
dt = 0;
end
end
function:
% Mouse tıklama işlevi
function mmouseClickCallback(~,~)
global t1 dt sayac sonuclar
if sayac >= 10
sayac=0;
end
if t1 == 0
% İlk tıklamada süreci başlatın
t1 = tic;
% İkinci tıklama için mesaj göster
title('Süre sayılıyor...');
% eski sayacı sıfırla
dt = 0;
disp('Geçen süre sayılıyor...');
else
% İkinci tıklamada süreci durdur
dt = toc(t1);
sayac=sayac+1;
% Geçen süreyi ekrana yazdır
disp([num2str(sayac),' Ölçüm: Geçen süre: ', num2str(dt), ' sn']);
% Sonuçları vektörüne ekle
sonuclar = [sonuclar dt];
% Son 10 ölçümü kontrol et ve ortalamasını hesapla
if sayac >= 10
% Son 10 ölçümü ekrana yazdır
disp('Son 10 ölçüm:');
disp(sonuclar);
% Ortalamayı hesapla
ort = mean(sonuclar);
disp(['Ortalama: ', num2str(ort), ' sn']);
%Graph
figure('Name', 'Damla Testi Süre Grafiği');
x=1:10;
y=sonuclar;
plot(x,y)
title('Süre grafigi');
xlabel('Ölçümler');
ylabel('Süreler');
% Sayaçı sıfırla ve sonuclar vektörünü temizle
sayac = 0;
sonuclar = [];
end
% Sayaçları sıfırlayın
t1 = 0;
dt = 0;
% Mouse tıklama işlevini kapatın
set(gcf, 'WindowButtonDownFcn', []);
end
end
##### 2 个评论显示 1更早的评论隐藏 1更早的评论
bykado 2023-6-6

Hi. Namely; I will drop at least 10 drops of water on different points of the fabric at certain intervals and take a video. I'd like to find the average time for each of these 10 drops to be absorbed by the fabric and plot their graph at the same time. Since each drop is independent, when each drop disappears, I save the time and reset the counter for the new drop. A single drop appears in the sample video. That's why you're confused.

bykado 2023-6-8
Graphics problem solved. only one problem remained. Error occurs when closing video window while playing video. How can i prevent it. Matlab R2015a
ERROR CODE:
Error using imshow>validateParent (line 348)
HAX must be a valid axes handle.
Error in imshow (line 253)
validateParent(specific_args.Parent)
Error in damlatest2 (line 20)
imshow(frame, 'Parent', axesHandle);
video oynatma kodu : % Video dosyasını aç
video = VideoReader('C:\som\droptest.mp4');
% İlk tıklama zamanını ve süreyi saklamak için değişkenler
t1 = 0;
dt = 0;
sayac = 0;
sonuclar = [];
% Videoyu oynatmak için bir figure oluştur
figure('Name', 'Damla Testi Video');
% Videonun oynatılacağı bir axes oluştur
axesHandle = axes('Parent', gcf);
while hasFrame(video)
frame = readFrame(video);
% Görüntüyü axes üzerinde göster
imshow(frame, 'Parent', axesHandle);
drawnow;
% Mouse tıklama işlevini kontrol et
set(gcf, 'WindowButtonDownFcn', @mmouseClickCallback);
% Geçen süre tıklamadan sonra videonun devam etmesini sağlamak için kontrol
if dt > 0
pause(dt);
dt = 0;
end
end
% Mouse tıklama işlevi
function mmmouseClickCallback(~,~)
global t1 dt sayac sonuclar
if sayac >= 10
sayac = 0;
end
if t1 == 0
% İlk tıklamada süreci başlatın
t1 = tic;
% İkinci tıklama için mesaj göster
disp('Geçen süre sayılıyor...');
else
% İkinci tıklamada süreci durdur
dt = toc(t1);
sayac = sayac + 1;
% Geçen süreyi ekrana yazdır
disp([num2str(sayac),' Ölçüm: Geçen süre: ', num2str(dt), ' sn']);
% Sonuçları vektörüne ekle
sonuclar = [sonuclar dt];
% Son 10 ölçümü kontrol et ve ortalamasını hesapla
if sayac >= 10
% Son 10 ölçümü ekrana yazdır
disp('Son 10 ölçüm:');
disp(sonuclar);
% Ortalamayı hesapla
ort = mean(sonuclar);
disp(['Ortalama: ', num2str(ort), ' sn']);
% Grafik çizimi
figure('Name', 'Damla Testi Süre Grafiği');
x = 1:10;
y = sonuclar(1:10);
plot(x, y);
title('Süre grafiği');
xlabel('Ölçümler');
ylabel('Süreler');
grid;
% Sayaçları sıfırla ve sonuclar vektörünü temizle
sayac = 0;
dt = 0;
sonuclar = [];
end
% Sayaçları sıfırlayın
t1 = 0;
dt = 0;
% Mouse tıklama işlevini kapatın
set(gcf, 'WindowButtonDownFcn', []);
end
end
% Pencere kapatma işlevi
function closeFigureCallback(~,~)
global t1 dt sayac sonuclar
% Sayaçları sıfırlayın
t1 = 0;
dt = 0;
sayac = 0;
sonuclar = [];
% Pencereyi kapat
close(gcf);
end

### 类别

Help CenterFile Exchange 中查找有关 Audio and Video Data 的更多信息

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by