我在Python中使用FFT实现了一个问题.我有完全奇怪的结果.好吧,我想打开图像,获取RGB中每个像素的值,然后我需要在它上面使用fft,然后再次转换为图像.
我的步骤:
1)我正在使用Python中的PIL库打开图像
from PIL import Image
im = Image.open("test.png")
Run Code Online (Sandbox Code Playgroud)
2)我得到了像素
pixels = list(im.getdata())
Run Code Online (Sandbox Code Playgroud)
3)我将每个像素分成r,g,b值
for x in range(width):
for y in range(height):
r,g,b = pixels[x*width+y]
red[x][y] = r
green[x][y] = g
blue[x][y] = b
Run Code Online (Sandbox Code Playgroud)
4).我们假设我有一个像素(111,111,111).并在所有红色值上使用fft
red = np.fft.fft(red)
Run Code Online (Sandbox Code Playgroud)
然后:
print (red[0][0], green[0][0], blue[0][0])
Run Code Online (Sandbox Code Playgroud)
我的输出是:
(53866+0j) 111 111
Run Code Online (Sandbox Code Playgroud)
我认为这是完全错误的.我的图像是64x64,而来自gimp的FFT完全不同.实际上,我的FFT只给出了具有巨大值的数组,这就是为什么我的输出图像是黑色的.
你知道问题出在哪里吗?
[编辑]
我按照建议改变了
red= np.fft.fft2(red)
Run Code Online (Sandbox Code Playgroud)
然后我扩展它
scale = 1/(width*height)
red= abs(red* scale)
Run Code Online (Sandbox Code Playgroud)
而且,我只得到黑色图像.
[EDIT2]
假设我不想打开它并保存为灰度图像.所以我这样做.
def getGray(pixel):
r,g,b = pixel
return (r+g+b)/3
im = Image.open("test.png")
im.load()
pixels = list(im.getdata())
width, …Run Code Online (Sandbox Code Playgroud) 我有两张图片,并想让它们之间的区别显而易见。我想为两个图像添加颜色,以便用户可以在一两秒钟内清楚地发现所有差异。
例如,这是两张图片,但有一些区别:
leftImage.jpg:
rightImage.jpg:
我当前使差异明显的方法是创建一个蒙版(两个图像之间的差异),将其涂成红色,然后将其添加到图像中。目的是用强烈的红色清楚地标记所有差异。这是我当前的代码:
import cv2
# load images
image1 = cv2.imread("leftImage.jpg")
image2 = cv2.imread("rightImage.jpg")
# compute difference
difference = cv2.subtract(image1, image2)
# color the mask red
Conv_hsv_Gray = cv2.cvtColor(difference, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(Conv_hsv_Gray, 0, 255,cv2.THRESH_BINARY_INV |cv2.THRESH_OTSU)
difference[mask != 255] = [0, 0, 255]
# add the red mask to the images to make the differences obvious
image1[mask != 255] = [0, 0, 255]
image2[mask != 255] = [0, 0, 255]
# store images
cv2.imwrite('diffOverImage1.png', image1)
cv2.imwrite('diffOverImage2.png', image1) …Run Code Online (Sandbox Code Playgroud) 
我想比较这两个图像的接近程度(相似区域中的红色),但我不能逐个像素地进行,因为它们的颜色位置不完全相同。有人知道这里有什么好方法吗?
谢谢,