OpenCV Python cv2.mixChannels()

6
我是一个有用的助手,可以翻译文本。
我正在尝试将这个从C++转换成Python,但结果不同。
在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 );

我在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)

你能发布两个程序的结果吗?这样我们就可以更好地了解问题出在哪里了。 - shish023
1
与C++代码使用Mats数组作为源和目标一样,您需要在Python中提供列表:cv2.mixChannels([hsv], [hue], [0,0]) - Dan Mašek
它起作用了@DanMašek!我将最后一行更改为cv2.mixChannels([hsv], [hue], ch)。 - João Cartucho
1个回答

6

当你查看文档时,你可以看到以Mat数组(或向量)作为输入和输出参数的C++函数。

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<Mat>& src, vector<Mat>& dst, const int* fromTo, size_t npairs)

同样地,在Python中,你需要提供源列表和目标列表的np.array

代码示例

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])

控制台输出

>python mix.py
True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接