Merge branch 'cvtcolor'

Conflicts:
	scikits/image/opencv/opencv_backend.c
	scikits/image/opencv/opencv_cv.c
This commit is contained in:
sccolbert
2009-10-24 15:10:44 +02:00
6 changed files with 12793 additions and 294 deletions
File diff suppressed because it is too large Load Diff
+4 -2
View File
@@ -17,6 +17,7 @@ np.import_array()
# dtype itself....
UINT8 = np.dtype('uint8')
INT8 = np.dtype('int8')
UINT16 = np.dtype('uint16')
INT16 = np.dtype('int16')
INT32 = np.dtype('int32')
FLOAT32 = np.dtype('float32')
@@ -25,6 +26,7 @@ FLOAT64 = np.dtype('float64')
cdef int IPL_DEPTH_SIGN = 0x80000000
cdef int IPL_DEPTH_8U = 8
cdef int IPL_DEPTH_8S = (IPL_DEPTH_SIGN | 8)
cdef int IPL_DEPTH_16U = 16
cdef int IPL_DEPTH_16S = (IPL_DEPTH_SIGN | 16)
cdef int IPL_DEPTH_32S = (IPL_DEPTH_SIGN | 32)
cdef int IPL_DEPTH_32F = 32
@@ -33,8 +35,8 @@ cdef int IPL_DEPTH_64F = 64
# I'd like a better to associate the IPL data type flag to the proper numpy
# types without using a dictionary.
_ipltypes = {UINT8: IPL_DEPTH_8U, INT8: IPL_DEPTH_8S, INT16: IPL_DEPTH_16S,
INT32: IPL_DEPTH_32S, FLOAT32: IPL_DEPTH_32F,
_ipltypes = {UINT8: IPL_DEPTH_8U, INT8: IPL_DEPTH_8S, UINT16: IPL_DEPTH_16U,
INT16: IPL_DEPTH_16S, INT32: IPL_DEPTH_32S, FLOAT32: IPL_DEPTH_32F,
FLOAT64: IPL_DEPTH_64F}
+96 -1
View File
@@ -1,6 +1,6 @@
#############################################
# Image Processing Constants
# Image Processing Constants
############################################
@@ -33,6 +33,101 @@ CV_MOP_GRADIENT = 4
CV_MOP_TOPHAT = 5
CV_MOP_BLACKHAT = 6
#-------------------------------------------------------------------------------
# Color Conversion
#-------------------------------------------------------------------------------
CV_BGR2BGRA = 0
CV_RGB2RGBA = CV_BGR2BGRA
CV_BGRA2BGR = 1
CV_RGBA2RGB = CV_BGRA2BGR
CV_BGR2RGBA = 2
CV_RGB2BGRA = CV_BGR2RGBA
CV_RGBA2BGR = 3
CV_BGRA2RGB = CV_RGBA2BGR
CV_BGR2RGB = 4
CV_RGB2BGR = CV_BGR2RGB
CV_BGRA2RGBA = 5
CV_RGBA2BGRA = CV_BGRA2RGBA
CV_BGR2GRAY = 6
CV_RGB2GRAY = 7
CV_GRAY2BGR = 8
CV_GRAY2RGB = CV_GRAY2BGR
CV_GRAY2BGRA = 9
CV_GRAY2RGBA = CV_GRAY2BGRA
CV_BGRA2GRAY = 10
CV_RGBA2GRAY = 11
CV_BGR2BGR565 = 12
CV_RGB2BGR565 = 13
CV_BGR5652BGR = 14
CV_BGR5652RGB = 15
CV_BGRA2BGR565 = 16
CV_RGBA2BGR565 = 17
CV_BGR5652BGRA = 18
CV_BGR5652RGBA = 19
CV_GRAY2BGR565 = 20
CV_BGR5652GRAY = 21
CV_BGR2BGR555 = 22
CV_RGB2BGR555 = 23
CV_BGR5552BGR = 24
CV_BGR5552RGB = 25
CV_BGRA2BGR555 = 26
CV_RGBA2BGR555 = 27
CV_BGR5552BGRA = 28
CV_BGR5552RGBA = 29
CV_GRAY2BGR555 = 30
CV_BGR5552GRAY = 31
CV_BGR2XYZ = 32
CV_RGB2XYZ = 33
CV_XYZ2BGR = 34
CV_XYZ2RGB = 35
CV_BGR2YCrCb = 36
CV_RGB2YCrCb = 37
CV_YCrCb2BGR = 38
CV_YCrCb2RGB = 39
CV_BGR2HSV = 40
CV_RGB2HSV = 41
CV_BGR2Lab = 44
CV_RGB2Lab = 45
CV_BayerBG2BGR = 46
CV_BayerGB2BGR = 47
CV_BayerRG2BGR = 48
CV_BayerGR2BGR = 49
CV_BayerBG2RGB = CV_BayerRG2BGR
CV_BayerGB2RGB = CV_BayerGR2BGR
CV_BayerRG2RGB = CV_BayerBG2BGR
CV_BayerGR2RGB = CV_BayerGB2BGR
CV_BGR2Luv = 50
CV_RGB2Luv = 51
CV_BGR2HLS = 52
CV_RGB2HLS = 53
CV_HSV2BGR = 54
CV_HSV2RGB = 55
CV_Lab2BGR = 56
CV_Lab2RGB = 57
CV_Luv2BGR = 58
CV_Luv2RGB = 59
CV_HLS2BGR = 60
CV_HLS2RGB = 61
#########################
# Calibration Constants #
#########################
File diff suppressed because it is too large Load Diff
+134
View File
@@ -17,6 +17,91 @@ from _libimport import cv
# setup numpy tables for this module
np.import_array()
#-------------------------------------------------------------------------------
# Useful global stuff
#-------------------------------------------------------------------------------
# a dict for cvCvtColor to get the appropriate types and shapes without
# if statements all over the place (this way is faster, cause the dict is
# created at import time)
# the order of list arguments is:
# [in_channels, out_channels, [input_dtypes]]
# out type is always the same as in type
_cvtcolor_dict = {CV_BGR2BGRA: [3, 4, [UINT8, UINT16, FLOAT32]],
CV_RGB2RGBA: [3, 4, [UINT8, UINT16, FLOAT32]],
CV_BGRA2BGR: [4, 3, [UINT8, UINT16, FLOAT32]],
CV_RGBA2RGB: [4, 3, [UINT8, UINT16, FLOAT32]],
CV_BGR2RGBA: [3, 4, [UINT8, UINT16, FLOAT32]],
CV_RGB2BGRA: [3, 4, [UINT8, UINT16, FLOAT32]],
CV_RGBA2BGR: [4, 3, [UINT8, UINT16, FLOAT32]],
CV_BGRA2RGB: [4, 3, [UINT8, UINT16, FLOAT32]],
CV_BGR2RGB: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_RGB2BGR: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_BGRA2RGBA: [4, 4, [UINT8, UINT16, FLOAT32]],
CV_RGBA2BGRA: [4, 4, [UINT8, UINT16, FLOAT32]],
CV_BGR2GRAY: [3, 1, [UINT8, UINT16, FLOAT32]],
CV_RGB2GRAY: [3, 1, [UINT8, UINT16, FLOAT32]],
CV_GRAY2BGR: [1, 3, [UINT8, UINT16, FLOAT32]],
CV_GRAY2RGB: [1, 3, [UINT8, UINT16, FLOAT32]],
CV_GRAY2BGRA: [1, 4, [UINT8, UINT16, FLOAT32]],
CV_GRAY2RGBA: [1, 4, [UINT8, UINT16, FLOAT32]],
CV_BGRA2GRAY: [4, 1, [UINT8, UINT16, FLOAT32]],
CV_RGBA2GRAY: [4, 1, [UINT8, UINT16, FLOAT32]],
CV_BGR2BGR565: [3, 2, [UINT8]],
CV_RGB2BGR565: [3, 2, [UINT8]],
CV_BGR5652BGR: [2, 3, [UINT8]],
CV_BGR5652RGB: [2, 3, [UINT8]],
CV_BGRA2BGR565: [4, 2, [UINT8]],
CV_RGBA2BGR565: [4, 2, [UINT8]],
CV_BGR5652BGRA: [2, 4, [UINT8]],
CV_BGR5652RGBA: [2, 4, [UINT8]],
CV_GRAY2BGR565: [1, 2, [UINT8]],
CV_BGR5652GRAY: [2, 1, [UINT8]],
CV_BGR2BGR555: [3, 2, [UINT8]],
CV_RGB2BGR555: [3, 2, [UINT8]],
CV_BGR5552BGR: [2, 3, [UINT8]],
CV_BGR5552RGB: [2, 3, [UINT8]],
CV_BGRA2BGR555: [4, 2, [UINT8]],
CV_RGBA2BGR555: [4, 2, [UINT8]],
CV_BGR5552BGRA: [2, 4, [UINT8]],
CV_BGR5552RGBA: [2, 4, [UINT8]],
CV_GRAY2BGR555: [1, 2, [UINT8]],
CV_BGR5552GRAY: [2, 1, [UINT8]],
CV_BGR2XYZ: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_RGB2XYZ: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_XYZ2BGR: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_XYZ2RGB: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_BGR2YCrCb: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_RGB2YCrCb: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_YCrCb2BGR: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_YCrCb2RGB: [3, 3, [UINT8, UINT16, FLOAT32]],
CV_BGR2HSV: [3, 3, [UINT8, FLOAT32]],
CV_RGB2HSV: [3, 3, [UINT8, FLOAT32]],
CV_BGR2Lab: [3, 3, [UINT8, FLOAT32]],
CV_RGB2Lab: [3, 3, [UINT8, FLOAT32]],
CV_BayerBG2BGR: [1, 3, [UINT8]],
CV_BayerGB2BGR: [1, 3, [UINT8]],
CV_BayerRG2BGR: [1, 3, [UINT8]],
CV_BayerGR2BGR: [1, 3, [UINT8]],
CV_BayerBG2RGB: [1, 3, [UINT8]],
CV_BayerGB2RGB: [1, 3, [UINT8]],
CV_BayerRG2RGB: [1, 3, [UINT8]],
CV_BayerGR2RGB: [1, 3, [UINT8]],
CV_BGR2Luv: [3, 3, [UINT8, FLOAT32]],
CV_RGB2Luv: [3, 3, [UINT8, FLOAT32]],
CV_BGR2HLS: [3, 3, [UINT8, FLOAT32]],
CV_RGB2HLS: [3, 3, [UINT8, FLOAT32]],
CV_HSV2BGR: [3, 3, [UINT8, FLOAT32]],
CV_HSV2RGB: [3, 3, [UINT8, FLOAT32]],
CV_Lab2BGR: [3, 3, [UINT8, FLOAT32]],
CV_Lab2RGB: [3, 3, [UINT8, FLOAT32]],
CV_Luv2BGR: [3, 3, [UINT8, FLOAT32]],
CV_Luv2RGB: [3, 3, [UINT8, FLOAT32]],
CV_HLS2BGR: [3, 3, [UINT8, FLOAT32]],
CV_HLS2RGB: [3, 3, [UINT8, FLOAT32]]}
###################################
# opencv function declarations
###################################
@@ -143,6 +228,11 @@ ctypedef void (*cvIntegralPtr)(IplImage*, IplImage*, IplImage*, IplImage*)
cdef cvIntegralPtr c_cvIntegral
c_cvIntegral = (<cvIntegralPtr*><size_t>ctypes.addressof(cv.cvIntegral))[0]
# cvCvtColor
ctypedef void (*cvCvtColorPtr)(IplImage*, IplImage*, int)
cdef cvCvtColorPtr c_cvCvtColor
c_cvCvtColor = (<cvCvtColorPtr*><size_t>ctypes.addressof(cv.cvCvtColor))[0]
# cvCalibrateCamera2
ctypedef void (*cvCalibrateCamera2Ptr)(CvMat*, CvMat*, CvMat*,
CvSize, CvMat*, CvMat*, CvMat*, CvMat*, int)
@@ -1029,6 +1119,50 @@ def cvIntegral(np.ndarray src, square_sum=False, tilted_sum=False):
return out
def cvCvtColor(np.ndarray src, int code):
validate_array(src)
assert_dtype(src, [UINT8, UINT16, FLOAT32])
try:
conversion_params = _cvtcolor_dict[code]
except KeyError:
print 'unknown conversion code'
raise
cdef int src_channels = <int>conversion_params[0]
cdef int out_channels = <int>conversion_params[1]
src_dtypes = conversion_params[2]
assert_nchannels(src, src_channels)
assert_dtype(src, src_dtypes)
cdef np.ndarray out
# the out array can be 2, 3, or 4 channels so we need shapes that
# can handle either
cdef np.npy_intp out_shape2[2]
cdef np.npy_intp out_shape3[3]
out_shape2[0] = src.shape[0]
out_shape2[1] = src.shape[1]
out_shape3[0] = src.shape[0]
out_shape3[1] = src.shape[1]
if out_channels == 1:
out = new_array(2, out_shape2, src.dtype)
else:
out_shape3[2] = <np.npy_intp>out_channels
out = new_array(3, out_shape3, src.dtype)
cdef IplImage srcimg
cdef IplImage outimg
populate_iplimage(src, &srcimg)
populate_iplimage(out, &outimg)
c_cvCvtColor(&srcimg, &outimg, code)
return out
def cvCalibrateCamera2(np.ndarray object_points, np.ndarray image_points,
np.ndarray point_counts, image_size):
@@ -186,6 +186,20 @@ class TestIntegral(OpenCVTest):
cvIntegral(self.lena_RGB_U8, True, True)
class TestCvtColor(OpenCVTest):
@opencv_skip
def test_cvCvtColor(self):
cvCvtColor(self.lena_RGB_U8, CV_RGB2BGR)
cvCvtColor(self.lena_RGB_U8, CV_RGB2BGRA)
cvCvtColor(self.lena_RGB_U8, CV_RGB2HSV)
cvCvtColor(self.lena_RGB_U8, CV_RGB2BGR565)
cvCvtColor(self.lena_RGB_U8, CV_RGB2BGR555)
cvCvtColor(self.lena_RGB_U8, CV_RGB2GRAY)
cvCvtColor(self.lena_GRAY_U8, CV_GRAY2BGR)
cvCvtColor(self.lena_GRAY_U8, CV_GRAY2BGR565)
cvCvtColor(self.lena_GRAY_U8, CV_GRAY2BGR555)
class TestFindChessboardCorners(object):
@opencv_skip
def test_cvFindChessboardCorners(self):