public
Description: A collection of object-oriented Python wrappers for OpenCV
Homepage:
Clone URL: git://github.com/cv/opencv-wrappers.git
opencv-wrappers / wrappers.py
100644 105 lines (76 sloc) 3.046 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from opencv import *
from opencv.highgui import *
 
class Window:
  def __init__(self, name="Main Window"):
    self.name = name
    cvNamedWindow(name)
  
  def show(self, image):
    cvShowImage(self.name, image.image)
  
  def destroy(self):
    cvDestroyWindow(self.name)
 
class Camera:
    
  def __init__(self, id):
    self.capture = cvCreateCameraCapture(id)
    cvSetCaptureProperty(self.capture, CV_CAP_PROP_FRAME_WIDTH, 640);
    cvSetCaptureProperty(self.capture, CV_CAP_PROP_FRAME_HEIGHT, 480);
      
  def frame(self):
    return Image(cvQueryFrame(self.capture))
 
class Image:
 
  def __init__(self, image):
    self.image = image
    self.size = cvSize(image.width, image.height)
      
  def __del__(self):
    if self and self.image:
      cvReleaseImage(self.image)
  
  def fill(self,r,g,b):
    cvSet(self.image, cvScalar(r, g, b))
    return self
      
  def grayscale(self, channels=1):
    result = cvCreateImage(self.size, self.image.depth, channels)
    cvCvtColor(self.image, result, CV_RGB2GRAY)
    return Image(result)
 
  def threshold(self, threshold, max_value=255, mode=CV_THRESH_BINARY, channels=1):
    result = cvCreateImage(self.size, self.image.depth, channels)
    cvThreshold(self.image, result, threshold, 255, mode)
    return Image(result)
      
  def add(self, anotherImage, channels=1):
    result = cvCreateImage(self.size, self.image.depth, channels)
    cvAdd(self.image, anotherImage, result)
    return Image(result)
 
  def sub(self, anotherImage, channels=1):
    result = cvCreateImage(self.size, self.image.depth, channels)
    cvSub(self.image, anotherImage.image, result)
    return Image(result)
 
  def xor(self, anotherImage, channels=1):
    result = cvCreateImage(self.size, self.image.depth, channels)
    cvXor(self.image, anotherImage, result)
    return Image(result)
    
  def _and(self, anotherImage, channels=1):
    result = cvCreateImage(self.size, self.image.depth, channels)
    cvAnd(self.image, anotherImage, result)
    return Image(result)
 
  def _not(self, channels=1):
    result = cvCreateImage(self.size, self.image.depth, channels)
    cvNot(self.image, result)
    return Image(result)
 
  def invert(self, channels=1):
    return self._not(channels)
    
  def nand(self, anotherImage, channels=1):
    return self._not(self.image)._and(anotherImage)
    
def getKeyPressed(wait=10):
  return cvWaitKey(wait)
  
def createImage(size, depth=IPL_DEPTH_8U, channels=1):
  return Image(cvCreateImage(size, depth, channels))
 
def createBlueImage(size):
  return createImage(size, channels=3).fill(255,0,0)
 
def createGreenImage(size):
  return createImage(size, channels=3).fill(0,255,0)
 
def createRedImage(size):
  return createImage(size, channels=3).fill(0,0,255)
 
def createYellowImage(size):
  return createImage(size, channels=3).fill(0,255,255)
 
def createFuchsiaImage(size):
  return createImage(size, channels=3).fill(255,0,255)
 
def createCyanImage(size):
  return createImage(size, channels=3).fill(255,255,0)
 
cvStartWindowThread()