OpenCV/Python:fftimage上的掩码-为什么我们需要两个通道?
我用掩模从fft变换后的图像中截取一些频率 我的代码是: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
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