Я работал над попыткой подключить небольшую программу отслеживания движения, которая отличается от метода, связанного с выполнением обратной проекции, от MATLAB до C, m с некоторыми проблемами с ним.Портирование кодов от MATLAB до C (OpenCV)
Я не знаю, как интерпретировать некоторые линии от MATLAB до C (OpenCV).
https://drive.google.com/drive/folders/0B2r9FmkcbNwAbHdtVEVkSW1SQW8
Я поставил 2 .m файлы, 1 .cpp файл и каталог, в котором фотографии размещаются на обе программы, чтобы использовать на моем googledrive.
«demo_MultiMeanShift_1st_ver_0413.m» является то, что я хотел бы порт C,
«boxfilter.m» это функция, которая находится в следующем веб-сайте: http://blog.csdn.net/wds555/article/details/23176313 (Это китайский сайт, однако)
и «Meanshift_demo.cpp» - это то, что я сделал до сих пор.
Там вы в основном две части, которые я не знаю, как интерпретировать из MATLAB в C: первая часть:
bas = zeros(hei,wid,N) ;
for i = 1 : 1 : N
bas(:,:,i) = boxfilter(ones(hei,wid), floor(r/i)) ;
end
Ic_mean = zeros(hei,wid,dep,N) ;
for i = 1 : 1 : N
for d = 1 : 1 : dep
%Average pixel value(s) of the object being tracked
Ic_mean(pc(2)-(r+sw) : pc(2)+(r+sw), pc(1)-(r+sw) : pc(1)+(r+sw), d, i) = boxfilter(Ip(pc(2)-(r+sw) : pc(2)+(r+sw), pc(1)-(r+sw) : pc(1)+(r+sw),d), floor(r/i)) ./ bas(pc(2)-(r+sw) : pc(2)+(r+sw), pc(1)-(r+sw) : pc(1)+(r+sw),i);
%Ic_mean(:,:,d,i) = boxfilter(Ip(:,:,d), floor(r/i)) ./ bas(:,:,i);
end
end
dis = zeros(1,N) ;
вторая часть:
for i = -sw + pc(2) : 2 : sw + pc(2)
for j = -sw + pc(1) : 2 : sw + pc(1)
for d = 1 : 1 : N
dis(d) = sqrt(... % (p1(R1, G1, B1) - p2(R2, G2, B2))^2
(Ic_mean(i,j,1,d) - Ip_mean(pc(2),pc(1),1,d))^2 ...
+ (Ic_mean(i,j,2,d) - Ip_mean(pc(2),pc(1),2,d))^2 ...
+ (Ic_mean(i,j,3,d) - Ip_mean(pc(2),pc(1),3,d))^2);
end
if disMin > mean(dis)
disMin = mean(dis) ;
i_hold = i ;
j_hold = j ;
end
end
end
В MATLAB я могу читать , получать доступ и изменять значения пикселей непосредственно, например:
Img (x, y) = 0, чтобы установить значение некоторого пикселя 0 или Img (:,:, 1) = 1, чтобы установить, что пиксели определенного канала для всех равны 0.
Могу ли я также делать такие вещи так же быстро, как показано выше в OpenCV?
Ну, в настоящее время я использовал C-стилевые функции в OpenCV вместо C++. Это может занять некоторое время, чтобы привыкнуть к нему. –
Мне все еще нужно выяснить, как получить доступ к пикселям в OpenCV. Это вызвало у меня проблемы в течение некоторого времени. Ты за свою помощь. –