added cvFilter2D. This supports convolution with an arbitrary filter.

This commit is contained in:
sccolbert
2009-10-23 21:17:21 +02:00
parent c2bfc99818
commit dd5cff69b5
5 changed files with 2152 additions and 1581 deletions
+19 -5
View File
@@ -1,4 +1,4 @@
/* Generated by Cython 0.11.3 on Fri Oct 23 20:31:43 2009 */
/* Generated by Cython 0.11.3 on Fri Oct 23 21:00:39 2009 */
#define PY_SSIZE_T_CLEAN
#include "Python.h"
@@ -770,6 +770,19 @@ struct __pyx_t_7scikits_5image_6opencv_11opencv_type_CvMat {
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":54
* int cols
*
* cdef struct CvPoint: # <<<<<<<<<<<<<<
* int x
* int y
*/
struct __pyx_t_7scikits_5image_6opencv_11opencv_type_CvPoint {
int x;
int y;
};
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":58
* int y
*
* cdef struct CvPoint2D32f: # <<<<<<<<<<<<<<
* float x
* float y
@@ -780,7 +793,7 @@ struct __pyx_t_7scikits_5image_6opencv_11opencv_type_CvPoint2D32f {
float y;
};
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":58
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":62
* float y
*
* cdef struct CvSize: # <<<<<<<<<<<<<<
@@ -793,7 +806,7 @@ struct __pyx_t_7scikits_5image_6opencv_11opencv_type_CvSize {
int height;
};
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":62
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":66
* int height
*
* cdef struct CvTermCriteria: # <<<<<<<<<<<<<<
@@ -807,7 +820,7 @@ struct __pyx_t_7scikits_5image_6opencv_11opencv_type_CvTermCriteria {
double epsilon;
};
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":67
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":71
* double epsilon
*
* cdef struct CvScalar: # <<<<<<<<<<<<<<
@@ -819,7 +832,7 @@ struct __pyx_t_7scikits_5image_6opencv_11opencv_type_CvScalar {
double val[4];
};
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":70
/* "/home/brucewayne/scikits_image/scikits.image/scikits/image/opencv/opencv_type.pxd":74
* double val[4]
*
* cdef struct _IplConvKernel: # <<<<<<<<<<<<<<
@@ -4577,6 +4590,7 @@ char* __pyx_import_star_type_names[] = {
"CvPoint2D32f",
"CvSize",
"PY_LONG_LONG",
"CvPoint",
"Py_UNICODE",
0
};
File diff suppressed because it is too large Load Diff
+53 -1
View File
@@ -132,7 +132,12 @@ ctypedef void (*cvMorphologyExPtr)(IplImage*, IplImage*, IplImage*,
cdef cvMorphologyExPtr c_cvMorphologyEx
c_cvMorphologyEx = (<cvMorphologyExPtr*><size_t>
ctypes.addressof(cv.cvMorphologyEx))[0]
# cvFilter2D
ctypedef void (*cvFilter2DPtr)(IplImage*, IplImage*, CvMat*, CvPoint)
cdef cvFilter2DPtr c_cvFilter2D
c_cvFilter2D = (<cvFilter2DPtr*><size_t>ctypes.addressof(cv.cvFilter2D))[0]
# cvCalibrateCamera2
ctypedef void (*cvCalibrateCamera2Ptr)(CvMat*, CvMat*, CvMat*,
CvSize, CvMat*, CvMat*, CvMat*, CvMat*, int)
@@ -918,6 +923,53 @@ def cvMorphologyEx(np.ndarray src, np.ndarray element, int operation,
return None
else:
return out
def cvFilter2D(np.ndarray src, np.ndarray kernel, anchor=None, in_place=False):
validate_array(src)
validate_array(kernel)
assert_ndims(kernel, [2])
assert_dtype(kernel, [FLOAT32])
cdef CvPoint cv_anchor
if anchor is not None:
assert len(anchor) == 2, 'anchor must be (x, y) tuple'
cv_anchor.x = <int>anchor[0]
cv_anchor.y = <int>anchor[1]
assert (cv_anchor.x < kernel.shape[1]) and (cv_anchor.x >= 0) \
and (cv_anchor.y < kernel.shape[0]) and (cv_anchor.y >= 0), \
'anchor point must be inside kernel'
else:
cv_anchor.x = <int>(kernel.shape[1] / 2.)
cv_anchor.y = <int>(kernel.shape[0] / 2.)
cdef np.ndarray out
if in_place:
out = src
else:
out = new_array_like(src)
cdef IplImage srcimg
cdef IplImage outimg
cdef IplImage kernelimg
populate_iplimage(src, &srcimg)
populate_iplimage(out, &outimg)
populate_iplimage(kernel, &kernelimg)
cdef CvMat* cv_kernel
cv_kernel = cvmat_ptr_from_iplimage(&kernelimg)
c_cvFilter2D(&srcimg, &outimg, cv_kernel, cv_anchor)
PyMem_Free(cv_kernel)
if in_place:
return None
else:
return out
def cvCalibrateCamera2(np.ndarray object_points, np.ndarray image_points,
np.ndarray point_counts, image_size):
+4
View File
@@ -51,6 +51,10 @@ cdef struct CvMat:
int rows
int cols
cdef struct CvPoint:
int x
int y
cdef struct CvPoint2D32f:
float x
float y
@@ -170,6 +170,15 @@ class TestMorphologyEx(OpenCVTest):
[0, 1, 0]], dtype='int32')
cvMorphologyEx(self.lena_RGB_U8, kern, CV_MOP_TOPHAT, in_place=True)
class TestFilter2D(OpenCVTest):
@opencv_skip
def test_cvFilter2D(self):
kern = np.array([[0, 1.5, 0],
[1, 1, 2.6],
[0, .76, 0]], dtype='float32')
cvFilter2D(self.lena_RGB_U8, kern, in_place=True)
class TestFindChessboardCorners(object):
@opencv_skip