Особенности и методы построения приложений с технологией оптического потока. Простые функции для преобразования изображений. Примитивные типы данных в OpenCV. Выбор языка программирования. Разработка приложения с использованием алгоритма Лукаса-Канаде.
Федеральное агентство связи Федеральное государственное образовательное бюджетное учреждение высшего профессионального образования «Поволжский государственный университет телекоммуникаций и информатики» Направление (специальность) Информационные системы и технологииПосле компиляции и запуска из командной строки с одним аргументом, программа загрузит изображение в память и отобразит его на экране. Функция CVLOADIMAGE() является высокоуровневой: определяет формат файла по его имени; автоматически выделяет память, необходимую для изображения. Функция CVDESTROYWINDOW() закрывает окно и высвобождает любую, связанную с этим окном, память (внутренний буфер для изображения, который содержит копию информации о пикселях из img). Функция CVQUERYFRAME() принимает в качестве аргумента указатель на структуру CVCAPTURE и помещает последующий кадр в память (которая на самом деле часть структуры CVCAPTURE). Для включения или выключения поддержки ROI, используются функции CVSETIMAGEROI() и CVRESETIMAGEROI(). Т.к. выделение части изображения имеет вид прямоугольника, нужно использовать структуру CVRECT, которую можно передать в функцию CVSETIMAGEROI() для "включения ROI"; для "выключения ROI" необходимо передать указатель на изображение в функцию CVRESETIMAGEROI(). void CVSETIMAGEROI( IPLIMAGE* image, CVRECT rect );В результате проделанной работы было разработано приложение с использованием алгоритма Лукаса-Канаде, реализованного на основе библиотеки OPENCV. Для достижения поставленной цели были решены следующие задачи: • Рассмотрено понятие оптический поток;Программный код import cv2 import numpy as np cap = cv2.VIDEOCAPTURE("vtest.avi") ret, frame1 = cap.read() prvs = cv2.CVTCOLOR(frame1,cv2.COLOR_BGR2GRAY) hsv = np.zeros_like(frame1) hsv[...,1] = 255 while(1): ret, frame2 = cap.read() next = cv2.CVTCOLOR(frame2,cv2.COLOR_BGR2GRAY) flow = cv2.CALCOPTICALFLOWFARNEBACK(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0) mag, ang = cv2.CARTTOPOLAR(flow[...,0], flow[...,1]) hsv[...,0] = ang*180/np.pi/2 hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX) bgr = cv2.CVTCOLOR(hsv,cv2.COLOR_HSV2BGR) cv2.imshow("frame2",bgr) k = cv2.WAITKEY(30) & 0xff if k == 27: break elif k == ord("s"): cv2.imwrite("opticalfb.png",frame2) cv2.imwrite("opticalhsv.png",bgr) prvs = next cap.release() cv2.DESTROYALLWINDOWS() importnumpyasnp # Take first frame and find corners in it ret, old_frame = cap.read() old_gray = cv2.CVTCOLOR(old_frame, cv2.COLOR_BGR2GRAY) p0 = cv2.GOODFEATURESTOTRACK(old_gray, mask = None, **feature_params) # Create a mask image for drawing purposes mask = np.zeros_like(old_frame) while(1): ret,frame = cap.read() frame_gray = cv2.CVTCOLOR(frame, cv2.COLOR_BGR2GRAY) # draw the tracks for i,(new,old) in enumerate(zip(good_new,good_old)): a,b = new.ravel() c,d = old.ravel() mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2) frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1) img = cv2.add(frame,mask) cv2.imshow("frame",img) k = cv2.WAITKEY(30) & 0xff if k == 27: break # Take first frame and find corners in it ret, old_frame = cap.read() old_gray = cv2.CVTCOLOR(old_frame, cv2.COLOR_BGR2GRAY) p0 = cv2.
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы