Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Python 使用matplotlib和numpy对图像应用复杂变换_Python_Image Processing_Matplotlib_Plot - Fatal编程技术网

Python 使用matplotlib和numpy对图像应用复杂变换

Python 使用matplotlib和numpy对图像应用复杂变换,python,image-processing,matplotlib,plot,Python,Image Processing,Matplotlib,Plot,嗨,我正在尝试使用matplotlib将mobius变换应用于图像。这是实现这一点的python代码 import matplotlib.pyplot as plt import matplotlib.image as mpimg from numpy import * img = mpimg.imread('test.jpg') # load an image zi = [766j, 512+766j, 256+192j] wi = [738j, 512+496j, 256+173j] r

嗨,我正在尝试使用matplotlib将mobius变换应用于图像。这是实现这一点的python代码

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from numpy import *


img = mpimg.imread('test.jpg') # load an image
zi = [766j, 512+766j, 256+192j]
wi = [738j, 512+496j, 256+173j]
r = ones((600,700,3),dtype=uint8)*255 # empty-white image
for i in range(img.shape[1]):
    for j in range(img.shape[0]):
        z = complex(i,j)
        qf = ((wi[0] * (-wi[1] * (zi[0]-zi[1]) * (z-zi[2]) + wi[2] * (z-zi[1]) * (zi[0]-zi[2])) - wi[1]*wi[2]*(z-zi[0]) * (zi[1]-zi[2])))
        qs = (wi[2]*(zi[0]-zi[1])*(z-zi[2])-wi[1]*(z-zi[1])*(zi[0]-zi[2])+wi[0]*(z-zi[0])*(zi[1]-zi[2]))
        w = qf/qs
        r[int(imag(w)),int(real(w)),:] = img[j,i,:]

plt.subplot(121)
plt.imshow(img,origin='lower',aspect='auto')
plt.subplot(122)
plt.imshow(r,origin='lower',aspect='auto')
plt.show()
如果我运行这段代码,我会得到以下结果。


如果看到右侧,则大小会更改。我想知道如何将结果图像放入框中。我这样做的方式是我硬编码结果图像大小并运行代码。然而,由于mobius变换扩展和收缩图像,有时我得到非常小的图像,有时我得到非常大的图像。任何人都可以解决这个问题??谢谢

您可以执行以下操作来查找变换图像的x限制和y限制:

plt.gca().set_aspect('equal')
i, j = np.where(np.all(r!=255, axis=2))
xlimits = j.min(), j.max()
ylimits = i.min(), i.max()
plt.xlim(xlimits)
plt.ylim(ylimits)

添加了
set_aspect()
,以按原始纵横比显示图像
numpy.where()
将查找图像非白色(255、255、255)的行和列索引,它使用最小和最大索引来设置新的限制。

@saulocastro你能给我举个例子吗??我试过了,但似乎不起作用@eChung00我非常喜欢你的代码,你应该尝试使用更多的
numpy
矢量化操作来摆脱这些for循环…谢谢你的建议。。。我觉得如果图像的大小变大,速度会变慢。所以我会试试^^