我在低通FFt中使用cv2 python并且我已经改变了图像的属性但是这个图像是灰色图像。我想将其更改为彩色图像并保留灰色图像的属性
----------
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('rocket.jpg', 0)
height, width = img.shape
plt.figure("Input")
plt.subplot(221),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
fft = np.log(np.abs(np.fft.fftshift(np.fft.fft2(img))))
plt.subplot(222),plt.imshow(fft, cmap = 'gray')
plt.title('Fourier Transform'), plt.xticks([]), plt.yticks([])
r = 200
h_Filter_Low_Pass = np.zeros(img.size, img.dtype).reshape(img.shape)
for icounter in range(1, height):
for jcounter in range(1, width):
if ((height/2-icounter)**2 + (width/2 - jcounter)**2)**0.5 < r:
h_Filter_Low_Pass[icounter, jcounter] = 1
plt.subplot(223),plt.imshow(h_Filter_Low_Pass, cmap = 'gray')
plt.title('Filter'), plt.xticks([]), plt.yticks([])
h_fft = (np.abs(np.fft.fftshift(np.fft.fft2(h_Filter_Low_Pass)))+1)
plt.subplot(224),plt.imshow(h_fft, cmap = 'gray')
plt.title('Fourier Transform (Filter)'), plt.xticks([]), plt.yticks([])
fshift = np.fft.fftshift(np.fft.fft2(img))
plt.figure("output")
new = fshift * (h_Filter_Low_Pass)
g_ifft1 = (np.abs(np.fft.ifft2(np.fft.ifftshift(new)).real))
plt.subplot(),plt.imshow(g_ifft1, cmap = 'gray')
plt.title('output'), plt.xticks([]), plt.yticks([])
plt.show()
答案 0 :(得分:2)
而不是行:
fshift = np.fft.fftshift(np.fft.fft2(img))
new = fshift * (h_Filter_Low_Pass)
g_ifft1 = (np.abs(np.fft.ifft2(np.fft.ifftshift(new)).real))
plt.subplot(),plt.imshow(g_ifft1, cmap = 'gray')
您可能想要使用:
img_color = cv2.imread('rocket.jpg')
b,g,r = cv2.split(img_color)
def g_ifft(x):
fshift = np.fft.fftshift(np.fft.fft2(x))
new = fshift * (h_Filter_Low_Pass)
g_ifft1 = (np.abs(np.fft.ifft2(np.fft.ifftshift(new)).real))
g_ifft1 = cv2.normalize(g_ifft1,None,0,255,cv2.NORM_MINMAX, cv2.CV_8U)
return g_ifft1
b,g,r = map(g_ifft, (b,g,r))
g_ifft1 = cv2.merge((b,g,r))
g_ifft1 = cv2.cvtColor(g_ifft1, cv2.COLOR_BGR2RGB)
plt.subplot(),plt.imshow(g_ifft1)
这会将图像分割为颜色通道,将滤镜分别应用于每个颜色通道,然后再将它们合并。 (在合并之前,需要规范化步骤将数组从float64
转换为uint8
类型。)
示例输出: