mirror of
https://github.com/wassname/scikit-image.git
synced 2026-07-01 01:27:01 +08:00
added cvFilter2D. This supports convolution with an arbitrary filter.
This commit is contained in:
@@ -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
|
||||
};
|
||||
|
||||
+2067
-1575
File diff suppressed because it is too large
Load Diff
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user