Skip to content

Commit 0ee29d8

Browse files
authored
Merge pull request #51 from maderafunk/master
Setters for camera parameters and conversion from numpy array to frame object.
2 parents 88de3ca + 54ae3ab commit 0ee29d8

File tree

1 file changed

+106
-3
lines changed

1 file changed

+106
-3
lines changed

pylibfreenect2/libfreenect2.pyx

Lines changed: 106 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,10 @@ cdef class Frame:
217217
frame_type : int, optional
218218
Underlying frame type. Default is -1. Used by ``asarray`` method.
219219
220+
numpy_array : numpy.ndarray, optional
221+
Numpy array of depth or ir data with ndim=2,
222+
that will be converted to a frame class.
223+
Default is None.
220224
See also
221225
--------
222226
@@ -228,7 +232,7 @@ cdef class Frame:
228232
cdef int frame_type
229233

230234
def __cinit__(self, width=None, height=None, bytes_per_pixel=None,
231-
int frame_type=-1):
235+
int frame_type=-1, np.ndarray[np.float32_t, ndim=2, mode="c"] numpy_array=None):
232236
w,h,b = width, height, bytes_per_pixel
233237
all_none = (w is None) and (h is None) and (b is None)
234238
all_not_none = (w is not None) and (h is not None) and (b is not None)
@@ -238,11 +242,21 @@ cdef class Frame:
238242

239243
if all_not_none:
240244
self.take_ownership = True
241-
self.ptr = new libfreenect2.Frame(
242-
width, height, bytes_per_pixel, NULL)
245+
if numpy_array is None:
246+
self.ptr = new libfreenect2.Frame(
247+
width, height, bytes_per_pixel, NULL)
248+
else:
249+
self.__instantiate_frame_with_bytes(
250+
width, height, bytes_per_pixel, numpy_array.reshape(-1))
243251
else:
244252
self.take_ownership = False
245253

254+
cdef __instantiate_frame_with_bytes(self, int width, int height,
255+
int bytes_per_pixel, np.ndarray[np.float32_t, ndim=1, mode="c"] numpy_array):
256+
cdef uint8_t* bytes_ptr = reinterpret_cast[uint8_pt](&numpy_array[0])
257+
self.ptr = new libfreenect2.Frame(
258+
width, height, bytes_per_pixel, bytes_ptr)
259+
246260
def __dealloc__(self):
247261
if self.take_ownership and self.ptr is not NULL:
248262
del self.ptr
@@ -632,21 +646,40 @@ cdef class ColorCameraParams:
632646
"""Same as ``libfreenect2::Freenect2Device::ColorCameraParams::fx``"""
633647
return self.params.fx
634648

649+
@fx.setter
650+
def fx(self, value):
651+
"""Sets fx parameter"""
652+
self.params.fx = value
653+
635654
@property
636655
def fy(self):
637656
"""Same as ``libfreenect2::Freenect2Device::ColorCameraParams::fy``"""
638657
return self.params.fy
639658

659+
@fy.setter
660+
def fy(self, value):
661+
"""Sets fy parameter"""
662+
self.params.fy = value
663+
640664
@property
641665
def cx(self):
642666
"""Same as ``libfreenect2::Freenect2Device::ColorCameraParams::cx``"""
643667
return self.params.cx
644668

669+
@cx.setter
670+
def cx(self, value):
671+
"""Sets cx parameter"""
672+
self.params.cx = value
673+
645674
@property
646675
def cy(self):
647676
"""Same as ``libfreenect2::Freenect2Device::ColorCameraParams::cy``"""
648677
return self.params.cy
649678

679+
@cy.setter
680+
def cy(self, value):
681+
"""Sets cx parameter"""
682+
self.params.cy = value
650683

651684
cdef class IrCameraParams:
652685
"""Python interface for ``libfreenect2::IrCameraParams``.
@@ -666,21 +699,91 @@ cdef class IrCameraParams:
666699
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::fx``"""
667700
return self.params.fx
668701

702+
@fx.setter
703+
def fx(self, value):
704+
"""Sets fx parameter"""
705+
self.params.fx = value
706+
669707
@property
670708
def fy(self):
671709
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::fy``"""
672710
return self.params.fy
673711

712+
@fy.setter
713+
def fy(self, value):
714+
"""Sets fy parameter"""
715+
self.params.fy = value
716+
674717
@property
675718
def cx(self):
676719
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::cx``"""
677720
return self.params.cx
678721

722+
@cx.setter
723+
def cx(self, value):
724+
"""Sets cx parameter"""
725+
self.params.cx = value
726+
679727
@property
680728
def cy(self):
681729
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::cy``"""
682730
return self.params.cy
683731

732+
@cy.setter
733+
def cy(self, value):
734+
"""Sets cx parameter"""
735+
self.params.cy = value
736+
737+
@property
738+
def k1(self):
739+
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::k1``"""
740+
return self.params.k1
741+
742+
@k1.setter
743+
def k1(self, value):
744+
"""Sets k1 parameter"""
745+
self.params.k1 = value
746+
747+
@property
748+
def k2(self):
749+
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::k2``"""
750+
return self.params.k2
751+
752+
@k2.setter
753+
def k2(self, value):
754+
"""Sets k2 parameter"""
755+
self.params.k2 = value
756+
757+
@property
758+
def k3(self):
759+
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::k3``"""
760+
return self.params.k3
761+
762+
@k3.setter
763+
def k3(self, value):
764+
"""Sets k3 parameter"""
765+
self.params.k3 = value
766+
767+
@property
768+
def p1(self):
769+
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::p1``"""
770+
return self.params.p1
771+
772+
@p1.setter
773+
def p1(self, value):
774+
"""Sets p1 parameter"""
775+
self.params.p1 = value
776+
777+
@property
778+
def p2(self):
779+
"""Same as ``libfreenect2::Freenect2Device::IrCameraParams::p2``"""
780+
return self.params.p2
781+
782+
@p2.setter
783+
def p2(self, value):
784+
"""Sets p2 parameter"""
785+
self.params.p2 = value
786+
684787
cdef class Registration:
685788
"""Python interface for ``libfreenect2::Registration``.
686789

0 commit comments

Comments
 (0)