суббота, 12 февраля 2011 г.

Результаты первого знакомства.

Тадааам!! Первое знакомство прошло довольно успешно.
Достижения:
Знакомство с Os Ubuntu
Знакомство с языком Python (довольно трудно было привыкнуть к отсутствию ";", да и отсутствие необходимости указывать тип данных стало неожиданностью)
Поверхностное знакомство с OpenCV функциями (код ниже)

Сейчас пытаюсь постичь типы данных (cvArr cvMat), на данном этапе мозг выносит нереально.....

Итак собственно результаты первого знакомства в коде =)

Программа №1 - открытие изображения.
from opencv.cv import *
from opencv.highgui import *

def main():
    cvNamedWindow("win",CV_WINDOW_AUTOSIZE)
    filename = "1.jpg"
    im = cvLoadImage(filename)
    if im==None:
      return -1
    cvShowImage("win", im)
    cvWaitKey()
    cvReleaseImage(im)
    cvDestroyWindow("win")
    return 0;
 

if __name__ == "__main__":
 print(main())

Программа №2 - воспроизведение видео
from opencv.cv import *
from opencv.highgui import *

def main():
 cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE)
 capture = cvCreateCameraCapture(0)
 loop = True
 while (loop):
  frame = cvQueryFrame(capture)
  if (frame == None):
   break;   
   cvReleaseCapture(capture)
   cvDestroyWindow("Example2")
   return -1
  cvShowImage("Example2", frame)
  char = cvWaitKey(33)
  if (char != -1):
   if ord(char) == 27:
    loop = False
 cvReleaseCapture(capture)
 cvDestroyWindow("Example2")
 return 0
 

if __name__ == '__main__':
 print(main())

Программа №3 - воспроизведение видео + примитивный бегунок
from opencv.cv import *
from opencv.highgui import *

g_slider_pos = 0

def onTrackbarSlide(pos):
 cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos)

if __name__ == '__main__':
 cvNamedWindow("VideoPlaying", CV_WINDOW_AUTOSIZE)
 g_capture = cvCreateFileCapture("1.avi")
 frames = long(cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT))
 
 if (frames != 0):
  cvCreateTrackbar("Position","VideoPlaying", g_slider_pos, frames, onTrackbarSlide)
  
 loop = True
 
 while (loop):
  frame = cvQueryFrame(g_capture)
  if (frame == None):
   break;
  cvShowImage("VideoPlaying", frame)
  char = cvWaitKey(33)
  if (char != -1):
   if (ord(char) == 27):
    loop = False
 cvReleaseCapture(g_capture)   
 cvDestroyWindow("VideoPlaying")
 

Программа №4 -  сохранение видео в файл
from opencv.cv import *
from opencv.highgui import *

def main():
 camerain = cvCreateCameraCapture(0)
 cvNamedWindow("tratata",CV_WINDOW_AUTOSIZE)
 frame = cvQueryFrame(camerain)
 fps = cvGetCaptureProperty(camerain,CV_CAP_PROP_FPS) 
 if fps<0:
  fps=40  
 print(fps) 
 width=int(cvGetCaptureProperty(camerain,
        CV_CAP_PROP_FRAME_WIDTH))
 height=int(cvGetCaptureProperty(camerain,
        CV_CAP_PROP_FRAME_HEIGHT))
 size = cvSize(width,height) 
 writer=cvCreateVideoWriter("2.avi",
        CV_FOURCC('M','J','P','G'),fps,size)
 writer1=cvCreateVideoWriter("3.avi",
        CV_FOURCC('M','J','P','G'),fps,size) 
 frame1=cvCreateImage(size,IPL_DEPTH_8U,3)
 loop=True
 while (loop):
  frame=cvQueryFrame(camerain)
  if frame==None:
   break
   cvReleaseCapture(camerain)
   cvDestroyWindow("tratata")
   return -1
  cvShowImage("tratata",frame)  
  cvLogPolar(frame,frame1,cvPoint2D32f(
                frame.width/2,frame.height/2),
                40,CV_INTER_LINEAR+
                CV_WARP_FILL_OUTLIERS)  
  cvWriteFrame(writer,frame)
  cvWriteFrame(writer1,frame1)
  c=cvWaitKey(40)
  if (c != -1):
   if ord(c) == 27:
    loop = False
 cvReleaseCapture(camerain)
 cvDestroyWindow("tratata")
 return 0

if __name__ == '__main__':
 main()

Программа №5 - детектор границ Кенни + различные трансформации =)

5.1
from opencv.cv import *
from opencv.highgui import *

def doPyrDown(inim,filter=7):
 out = cvCreateImage(cvSize(inim.width/2, inim.height/2),inim.depth,inim.nChannels)
 cvPyrDown(inim,out)
 return out
 
def doCanny(img,lowth,highth,aperture):
 if img.nChannels != 1:
  return 0
 out = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1)
 cvCanny(img,out,lowth,highth,aperture)
 return out

def main():
 cvNamedWindow("Main",CV_WINDOW_AUTOSIZE)
 cvNamedWindow("1stTr",CV_WINDOW_AUTOSIZE)
 cvNamedWindow("2ndTr",CV_WINDOW_AUTOSIZE)
 cvNamedWindow("3rdTr",CV_WINDOW_AUTOSIZE) 
 mainimg=cvLoadImage("1.jpg") 
 print(mainimg.nChannels) 
 grayimg=cvCreateImage(cvSize( mainimg.width, mainimg.height ),IPL_DEPTH_8U,1)
 cvCvtColor( mainimg, grayimg, CV_RGB2GRAY )
 print(grayimg.nChannels) 
 im1=doPyrDown(grayimg) 
 im2=doPyrDown(im1) 
 im3=doCanny(im2,10,100,3)
 cvShowImage("Main",mainimg)
 cvShowImage("1stTr",im1)
 cvShowImage("2ndTr",im2)
 cvShowImage("3rdTr",im3) 
 cvWaitKey(0) 
 cvDestroyWindow("Main")
 cvDestroyWindow("1stTr")
 cvDestroyWindow("2ndTr")
 cvDestroyWindow("3rdTr")
 return 0

if __name__ == '__main__':
 main()


5.2
from opencv.cv import *
from opencv.highgui import *
 
def doCanny(img,lowth,highth,aperture):
 if img.nChannels != 1:
  return 0
 out = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1)
 cvCanny(img,out,lowth,highth,aperture)
 return out

def main():
 cvNamedWindow("Main",CV_WINDOW_AUTOSIZE)
 
 capture = cvCreateFileCapture('1.avi')
 loop = True
 while (loop):
  frame = cvQueryFrame(capture)
  if (frame == None):
   break;
  grayimg=cvCreateImage(cvSize( frame.width, frame.height ),IPL_DEPTH_8U,1)
  cvCvtColor( frame, grayimg, CV_RGB2GRAY )
  im3=doCanny(grayimg,10,100,3)
  cvShowImage("Main", im3)
  char = cvWaitKey(33)
  if (char != -1):
   if (ord(char) == 27):
    loop = False
 cvDestroyWindow("Main")
 return 0
 
if __name__ == '__main__':
 main()

3 комментария:

  1. к питону очень трудно привыкать после обучения 3х лет на шарпах. тех кто не пробывал запускать питон у себя все делается достаточно не трудно, пару запросами из терминала. а писать приходилось уже через блокнот:( жалко нет под питон такой же срады как студия, как в ней было хорошо...

    ОтветитьУдалить
  2. указывайте версии питона и опенСВ)

    ОтветитьУдалить
  3. > жалко нет под питон такой же срады как студия, как в ней было хорошо...

    Для питона есть целая пачка IDE, вовсе не стоит мучаться в блокноте:
    http://wiki.python.org/moin/IntegratedDevelopmentEnvironments

    Вот, например, хороший вариант - http://pydev.org/

    ОтветитьУдалить