mirror of
https://github.com/wassname/scikit-image.git
synced 2026-07-12 11:41:20 +08:00
Merge branch 'cvtcolor'
Conflicts: scikits/image/opencv/opencv_backend.c scikits/image/opencv/opencv_cv.c
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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}
|
||||
|
||||
|
||||
|
||||
@@ -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 #
|
||||
#########################
|
||||
|
||||
+11276
-276
File diff suppressed because it is too large
Load Diff
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user