OpenCV Python cv2.mixChannels ()

Estaba intentando convertir esto de C ++ a Python, pero está dando diferentes resultados de matiz.

En C ++:

/// Transform it to HSV cvtColor( src, hsv, CV_BGR2HSV ); /// Use only the Hue value hue.create( hsv.size(), hsv.depth() ); int ch[] = { 0, 0 }; mixChannels( &hsv, 1, &hue, 1, ch, 1 ); 

Probé esto en Python:

 # Transform it to HSV hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) # Use only the Hue value hue = np.zeros(hsv.shape, dtype=np.uint8) ch = [0] * 2 cv2.mixChannels(hsv, hue, ch) 

Cuando mira la documentación , puede ver las funciones de C ++ tomando como arrays de argumentos (o vectores) de Mat como entrada y salida.

C++: void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts, const int* fromTo, size_t npairs)

C++: void mixChannels(const vector& src, vector& dst, const int* fromTo, size_t npairs)

Del mismo modo, en Python debe proporcionar listas de np.array tanto para el origen como para el destino.

Ejemplo de código

 import cv2 import numpy as np img = cv2.imread('cage.png') hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # Baseline for comparison h,_,_ = cv2.split(hsv) hue = np.zeros(hsv.shape, dtype=np.uint8) cv2.mixChannels([hsv], [hue], [0,0]) print np.array_equal(h, hue[:,:,0]) 

Salida de consola

 >python mix.py True