Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV/Python:fftimage上的掩码-为什么我们需要两个通道?_Python_Opencv_Mask - Fatal编程技术网

OpenCV/Python:fftimage上的掩码-为什么我们需要两个通道?

OpenCV/Python:fftimage上的掩码-为什么我们需要两个通道?,python,opencv,mask,Python,Opencv,Mask,我用掩模从fft变换后的图像中截取一些频率 我的代码是: img = cv2.imread('messi.jpg',0) rows, cols = img.shape crow, ccol = rows/2 , cols/2 # center dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) 我的面具是: # create a mask first

我用掩模从fft变换后的图像中截取一些频率

我的代码是:

img = cv2.imread('messi.jpg',0)
rows, cols = img.shape
crow, ccol = rows/2 , cols/2     # center
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
我的面具是:

# create a mask first, center square is 0, remaining all ones
mask = np.ones((rows, cols, 2), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 0
然后我将遮罩应用于傅里叶变换图像:

fshift = dft_shift*mask
我试图绘制遮罩,但是我得到了一个尺寸错误,我必须使用下面的代码创建一个新的来打印它

printMask = np.ones(img.shape, np.uint8)
printMask[crow-30:crow+30, ccol-30:ccol+30] = 0

我的问题是为什么我们必须在掩码中使用
(行,列,2)
,而不是
(行,列)
。为什么我们需要这两个通道?

通常,图像有1个通道(灰度)或3个通道(RGB)。因此,应用于它们的遮罩应该具有相同数量的通道

在本例中,您将对傅里叶变换的结果应用遮罩。傅里叶变换是频率的复值函数。返回的两个通道分别是变换的实部和虚部。如果要在其上应用遮罩,则需要两个通道

您可以看到
cv2.dft
的工作原理


干杯

通常,图像有1个通道(灰度)或3个通道(RGB)。因此,应用于它们的遮罩应该具有相同数量的通道

在本例中,您将对傅里叶变换的结果应用遮罩。傅里叶变换是频率的复值函数。返回的两个通道分别是变换的实部和虚部。如果要在其上应用遮罩,则需要两个通道

您可以看到
cv2.dft
的工作原理


干杯

通常,图像有1个通道(灰度)或3个通道(RGB)。因此,应用于它们的遮罩应该具有相同数量的通道

在本例中,您将对傅里叶变换的结果应用遮罩。傅里叶变换是频率的复值函数。返回的两个通道分别是变换的实部和虚部。如果要在其上应用遮罩,则需要两个通道

您可以看到
cv2.dft
的工作原理


干杯

通常,图像有1个通道(灰度)或3个通道(RGB)。因此,应用于它们的遮罩应该具有相同数量的通道

在本例中,您将对傅里叶变换的结果应用遮罩。傅里叶变换是频率的复值函数。返回的两个通道分别是变换的实部和虚部。如果要在其上应用遮罩,则需要两个通道

您可以看到
cv2.dft
的工作原理



干杯

这是R吗?因为它看起来像蟒蛇。@MartínEscarrá是的,你是对的!它是纯python。我目前正在做两个项目,我有点困惑。谢谢这是R吗?因为它看起来像蟒蛇。@MartínEscarrá是的,你是对的!它是纯python。我目前正在做两个项目,我有点困惑。谢谢这是R吗?因为它看起来像蟒蛇。@MartínEscarrá是的,你是对的!它是纯python。我目前正在做两个项目,我有点困惑。谢谢这是R吗?因为它看起来像蟒蛇。@MartínEscarrá是的,你是对的!它是纯python。我目前正在做两个项目,我有点困惑。谢谢我只使用了
mask=np.ones((行,列),np.uint8)
进行了尝试,但是当我使用
f\u image=fft\u shift*mask
时,它不起作用,我得到了一个错误。关于面具,我从这里看到了一个例子:哦,我明白了。将遮罩应用于傅里叶变换的结果。傅里叶变换是频率的复值函数。返回的两个通道分别是转换的真实部分和复杂部分。如果要在其上应用遮罩,则需要两个通道。您可以在这里查看
cv2.dft
的工作原理->感谢您的回复!请把它添加到你的答案中,给你一个反馈。@mescarra你写的“转变中真实而复杂的部分”。它应该是“变换的实部和虚部”。我只使用了
mask=np.ones((行,列),np.uint8)
尝试了它,但是当我使用
f\u image=fft\u shift*mask
时,它不起作用,我得到了一个错误。关于面具,我从这里看到了一个例子:哦,我明白了。将遮罩应用于傅里叶变换的结果。傅里叶变换是频率的复值函数。返回的两个通道分别是转换的真实部分和复杂部分。如果要在其上应用遮罩,则需要两个通道。您可以在这里查看
cv2.dft
的工作原理->感谢您的回复!请把它添加到你的答案中,给你一个反馈。@mescarra你写的“转变中真实而复杂的部分”。它应该是“变换的实部和虚部”。我只使用了
mask=np.ones((行,列),np.uint8)
尝试了它,但是当我使用
f\u image=fft\u shift*mask
时,它不起作用,我得到了一个错误。关于面具,我从这里看到了一个例子:哦,我明白了。将遮罩应用于傅里叶变换的结果。傅里叶变换是频率的复值函数。返回的两个通道分别是转换的真实部分和复杂部分。如果要在其上应用遮罩,则需要两个通道。您可以在这里查看
cv2.dft
的工作原理->感谢您的回复!请把它添加到你的答案中,给你一个反馈。@mescarra你写的“转变中真实而复杂的部分”。它应该是“变换的实部和虚部”。我只使用了
mask=np.ones((行,列),np.uint8)
尝试了它,但是当我使用
f\u image=fft\u shift*mask
时,它不起作用,我得到了一个错误。关于面具,我从这里看到了一个例子:哦,我明白了。将遮罩应用于傅里叶变换的结果。傅里叶变换是频率的复值函数。返回的两个通道是真实和复杂的pa