extended cv.KMeans2 API in Python (ticket #414; thanks to hogelog). fixed failures in the opencv python tests.
This commit is contained in:
parent
53e362e403
commit
8754cafffb
@ -766,11 +766,14 @@ CheckArr int
|
|||||||
int flags 0
|
int flags 0
|
||||||
double min_val 0
|
double min_val 0
|
||||||
double max_val 0
|
double max_val 0
|
||||||
KMeans2
|
KMeans2 double
|
||||||
CvArr samples
|
CvArr samples
|
||||||
int nclusters
|
int nclusters
|
||||||
CvArr labels
|
CvArr labels
|
||||||
CvTermCriteria termcrit
|
CvTermCriteria termcrit
|
||||||
|
int attempts 1
|
||||||
|
int flags 0
|
||||||
|
CvArr centers NULL
|
||||||
|
|
||||||
# Gradients, Edges, Corners and Features
|
# Gradients, Edges, Corners and Features
|
||||||
Sobel
|
Sobel
|
||||||
@ -1648,7 +1651,7 @@ HOGDetectMultiScale CvSeq*
|
|||||||
int nbins 9
|
int nbins 9
|
||||||
int gammaCorrection 1
|
int gammaCorrection 1
|
||||||
|
|
||||||
grabCut
|
GrabCut
|
||||||
CvArr image
|
CvArr image
|
||||||
CvArr mask
|
CvArr mask
|
||||||
CvRect rect
|
CvRect rect
|
||||||
@ -1700,11 +1703,11 @@ CreateHist CvHistogram /doconly
|
|||||||
ranges ranges None
|
ranges ranges None
|
||||||
int uniform 1
|
int uniform 1
|
||||||
CreateImageHeader IplImage* /doconly
|
CreateImageHeader IplImage* /doconly
|
||||||
int size
|
CvSize size
|
||||||
int depth
|
int depth
|
||||||
int channels
|
int channels
|
||||||
CreateImage IplImage* /doconly
|
CreateImage IplImage* /doconly
|
||||||
int size
|
CvSize size
|
||||||
int depth
|
int depth
|
||||||
int channels
|
int channels
|
||||||
CreateMatHeader CvMat /doconly
|
CreateMatHeader CvMat /doconly
|
||||||
|
@ -3800,7 +3800,7 @@ static CvSeq* cvHOGDetectMultiScale( const CvArr* image, CvMemStorage* storage,
|
|||||||
return seq;
|
return seq;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cvgrabCut(CvArr *image,
|
static void cvGrabCut(CvArr *image,
|
||||||
CvArr *mask,
|
CvArr *mask,
|
||||||
CvRect rect,
|
CvRect rect,
|
||||||
CvArr *bgdModel,
|
CvArr *bgdModel,
|
||||||
@ -3845,6 +3845,22 @@ static int zero = 0;
|
|||||||
cvSnakeImage(image, points, length, a, b, g, coeff_usage, win, criteria, calc_gradient); \
|
cvSnakeImage(image, points, length, a, b, g, coeff_usage, win, criteria, calc_gradient); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
static double cppKMeans(const CvArr* _samples, int cluster_count, CvArr* _labels,
|
||||||
|
CvTermCriteria termcrit, int attempts, int flags, CvArr* _centers)
|
||||||
|
{
|
||||||
|
cv::Mat data = cv::cvarrToMat(_samples), labels = cv::cvarrToMat(_labels), centers;
|
||||||
|
if( _centers )
|
||||||
|
centers = cv::cvarrToMat(_centers);
|
||||||
|
CV_Assert( labels.isContinuous() && labels.type() == CV_32S &&
|
||||||
|
(labels.cols == 1 || labels.rows == 1) &&
|
||||||
|
labels.cols + labels.rows - 1 == data.rows );
|
||||||
|
return cv::kmeans(data, cluster_count, labels, termcrit, attempts,
|
||||||
|
flags, _centers ? ¢ers : 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
#define cvKMeans2(samples, nclusters, labels, termcrit, attempts, flags, centers) \
|
||||||
|
cppKMeans(samples, nclusters, labels, termcrit, attempts, flags, centers)
|
||||||
|
|
||||||
#include "generated0.i"
|
#include "generated0.i"
|
||||||
|
|
||||||
#if PYTHON_USE_NUMPY
|
#if PYTHON_USE_NUMPY
|
||||||
|
@ -305,25 +305,25 @@
|
|||||||
#define CV_EVENT_FLAG_SHIFTKEY 16
|
#define CV_EVENT_FLAG_SHIFTKEY 16
|
||||||
#define CV_EVENT_FLAG_ALTKEY 32
|
#define CV_EVENT_FLAG_ALTKEY 32
|
||||||
#define CV_MAX_DIM 32
|
#define CV_MAX_DIM 32
|
||||||
include/highgui.h:#define CV_CAP_PROP_POS_MSEC 0
|
#define CV_CAP_PROP_POS_MSEC 0
|
||||||
include/highgui.h:#define CV_CAP_PROP_POS_FRAMES 1
|
#define CV_CAP_PROP_POS_FRAMES 1
|
||||||
include/highgui.h:#define CV_CAP_PROP_POS_AVI_RATIO 2
|
#define CV_CAP_PROP_POS_AVI_RATIO 2
|
||||||
include/highgui.h:#define CV_CAP_PROP_FRAME_WIDTH 3
|
#define CV_CAP_PROP_FRAME_WIDTH 3
|
||||||
include/highgui.h:#define CV_CAP_PROP_FRAME_HEIGHT 4
|
#define CV_CAP_PROP_FRAME_HEIGHT 4
|
||||||
include/highgui.h:#define CV_CAP_PROP_FPS 5
|
#define CV_CAP_PROP_FPS 5
|
||||||
include/highgui.h:#define CV_CAP_PROP_FOURCC 6
|
#define CV_CAP_PROP_FOURCC 6
|
||||||
include/highgui.h:#define CV_CAP_PROP_FRAME_COUNT 7
|
#define CV_CAP_PROP_FRAME_COUNT 7
|
||||||
include/highgui.h:#define CV_CAP_PROP_FORMAT 8
|
#define CV_CAP_PROP_FORMAT 8
|
||||||
include/highgui.h:#define CV_CAP_PROP_MODE 9
|
#define CV_CAP_PROP_MODE 9
|
||||||
include/highgui.h:#define CV_CAP_PROP_BRIGHTNESS 10
|
#define CV_CAP_PROP_BRIGHTNESS 10
|
||||||
include/highgui.h:#define CV_CAP_PROP_CONTRAST 11
|
#define CV_CAP_PROP_CONTRAST 11
|
||||||
include/highgui.h:#define CV_CAP_PROP_SATURATION 12
|
#define CV_CAP_PROP_SATURATION 12
|
||||||
include/highgui.h:#define CV_CAP_PROP_HUE 13
|
#define CV_CAP_PROP_HUE 13
|
||||||
include/highgui.h:#define CV_CAP_PROP_GAIN 14
|
#define CV_CAP_PROP_GAIN 14
|
||||||
include/highgui.h:#define CV_CAP_PROP_EXPOSURE 15
|
#define CV_CAP_PROP_EXPOSURE 15
|
||||||
include/highgui.h:#define CV_CAP_PROP_CONVERT_RGB 16
|
#define CV_CAP_PROP_CONVERT_RGB 16
|
||||||
include/highgui.h:#define CV_CAP_PROP_WHITE_BALANCE 17
|
#define CV_CAP_PROP_WHITE_BALANCE 17
|
||||||
include/highgui.h:#define CV_CAP_PROP_RECTIFICATION 18
|
#define CV_CAP_PROP_RECTIFICATION 18
|
||||||
#define CV_CN_SHIFT 3
|
#define CV_CN_SHIFT 3
|
||||||
#define CV_IMWRITE_JPEG_QUALITY 1
|
#define CV_IMWRITE_JPEG_QUALITY 1
|
||||||
#define CV_IMWRITE_PNG_COMPRESSION 16
|
#define CV_IMWRITE_PNG_COMPRESSION 16
|
||||||
@ -333,7 +333,9 @@ include/highgui.h:#define CV_CAP_PROP_RECTIFICATION 18
|
|||||||
#define CV_PI
|
#define CV_PI
|
||||||
#define CV_GAUSSIAN_5x5
|
#define CV_GAUSSIAN_5x5
|
||||||
#define CV_CN_MAX
|
#define CV_CN_MAX
|
||||||
../include/opencv/highgui.h:#define CV_WINDOW_AUTOSIZE 1
|
#define CV_WINDOW_AUTOSIZE 1
|
||||||
../include/opencv/highgui.h:#define CV_WINDOW_NORMAL 0
|
#define CV_WINDOW_NORMAL 0
|
||||||
../include/opencv/highgui.h:#define CV_WINDOW_FULLSCREEN 1
|
#define CV_WINDOW_FULLSCREEN 1
|
||||||
../include/opencv/highgui.h:#define HG_AUTOSIZE CV_WINDOW_AUTOSIZE
|
#define HG_AUTOSIZE CV_WINDOW_AUTOSIZE
|
||||||
|
#define CV_CVTIMG_FLIP 1
|
||||||
|
#define CV_CVTIMG_SWAP_RB 2
|
||||||
|
@ -383,8 +383,8 @@ class FunctionTests(OpenCVTests):
|
|||||||
m = cv.CreateMat(rows, cols, t)
|
m = cv.CreateMat(rows, cols, t)
|
||||||
self.assertEqual(cv.GetElemType(m), t)
|
self.assertEqual(cv.GetElemType(m), t)
|
||||||
self.assertEqual(m.type, t)
|
self.assertEqual(m.type, t)
|
||||||
self.assertRaises(cv.error, lambda: cv.CreateMat(0, 100, cv.CV_8SC4))
|
self.assertRaises(cv.error, lambda: cv.CreateMat(-1, 100, cv.CV_8SC4))
|
||||||
self.assertRaises(cv.error, lambda: cv.CreateMat(100, 0, cv.CV_8SC4))
|
self.assertRaises(cv.error, lambda: cv.CreateMat(100, -1, cv.CV_8SC4))
|
||||||
self.assertRaises(cv.error, lambda: cv.cvmat())
|
self.assertRaises(cv.error, lambda: cv.cvmat())
|
||||||
|
|
||||||
def test_DrawChessboardCorners(self):
|
def test_DrawChessboardCorners(self):
|
||||||
@ -632,7 +632,7 @@ class FunctionTests(OpenCVTests):
|
|||||||
tmp1 = cv.CreateMat(1, 13 * 5, cv.CV_32FC1)
|
tmp1 = cv.CreateMat(1, 13 * 5, cv.CV_32FC1)
|
||||||
tmp2 = cv.CreateMat(1, 13 * 5, cv.CV_32FC1)
|
tmp2 = cv.CreateMat(1, 13 * 5, cv.CV_32FC1)
|
||||||
mask = cv.CreateMat(image.rows, image.cols, cv.CV_8UC1)
|
mask = cv.CreateMat(image.rows, image.cols, cv.CV_8UC1)
|
||||||
cv.grabCut(image, mask, (10,10,200,200), tmp1, tmp2, 10, cv.GC_INIT_WITH_RECT)
|
cv.GrabCut(image, mask, (10,10,200,200), tmp1, tmp2, 10, cv.GC_INIT_WITH_RECT)
|
||||||
|
|
||||||
def test_HoughLines2_PROBABILISTIC(self):
|
def test_HoughLines2_PROBABILISTIC(self):
|
||||||
li = cv.HoughLines2(self.yield_line_image(),
|
li = cv.HoughLines2(self.yield_line_image(),
|
||||||
@ -806,6 +806,36 @@ class FunctionTests(OpenCVTests):
|
|||||||
r2 = cv.SnakeImage(cv.GetImage(src), pts, w, w, w, (7,7), (cv.CV_TERMCRIT_ITER, 100, 0.1))
|
r2 = cv.SnakeImage(cv.GetImage(src), pts, w, w, w, (7,7), (cv.CV_TERMCRIT_ITER, 100, 0.1))
|
||||||
self.assertEqual(r, r2)
|
self.assertEqual(r, r2)
|
||||||
|
|
||||||
|
def test_KMeans2(self):
|
||||||
|
size = 500
|
||||||
|
samples = cv.CreateMat(size, 1, cv.CV_32FC3)
|
||||||
|
labels = cv.CreateMat(size, 1, cv.CV_32SC1)
|
||||||
|
centers = cv.CreateMat(2, 3, cv.CV_32FC1)
|
||||||
|
|
||||||
|
cv.Zero(samples)
|
||||||
|
cv.Zero(labels)
|
||||||
|
cv.Zero(centers)
|
||||||
|
|
||||||
|
cv.Set(cv.GetSubRect(samples, (0, 0, 1, size/2)), (255, 255, 255))
|
||||||
|
|
||||||
|
compact = cv.KMeans2(samples, 2, labels, (cv.CV_TERMCRIT_ITER, 100, 0.1), 1, 0, centers)
|
||||||
|
|
||||||
|
self.assertEqual(int(compact), 0)
|
||||||
|
|
||||||
|
random.seed(0)
|
||||||
|
for i in range(50):
|
||||||
|
index = random.randrange(size)
|
||||||
|
if index < size/2:
|
||||||
|
self.assertEqual(samples[index, 0], (255, 255, 255))
|
||||||
|
self.assertEqual(labels[index, 0], 1)
|
||||||
|
else:
|
||||||
|
self.assertEqual(samples[index, 0], (0, 0, 0))
|
||||||
|
self.assertEqual(labels[index, 0], 0)
|
||||||
|
|
||||||
|
for cluster in (0, 1):
|
||||||
|
for channel in (0, 1, 2):
|
||||||
|
self.assertEqual(int(centers[cluster, channel]), cluster*255)
|
||||||
|
|
||||||
def test_Sum(self):
|
def test_Sum(self):
|
||||||
for r in range(1,11):
|
for r in range(1,11):
|
||||||
for c in range(1, 11):
|
for c in range(1, 11):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user