% e: h0 d4 F& J1 o5 M8 M) m! F) i, J/ b* F( X+ F) X* X1 n, G
问题 W( [/ z8 v1 i( A$ n! F ) d& J# U6 d* f* w% U3 L" U, A, A; I(1)在刚写出来时,在rotate_image()函数中没有加,im = im.convert(‘RGB’)这句话,就会出现有的图正常,但是有的图报错,无法保存,并显示下面这句话 4 `8 T: g/ X$ \3 Z$ J0 S _8 _4 r" v. P$ M2 ]5 r+ L0 T
这个问题可以在这一篇blog找到解决方法。就是im.read(url)后,再将图片转换为RGB格式(image.convert(‘RGB’))。这样就可以避免很多因图片导致的问题 2 `$ y' n7 U" u( Y ^2 x+ M1 D$ J& J% w% x0 p% R. U
(2)在matlabplot中,显示图的第一步是创建画布,plt.figure(),然后在画布上添加子图,最后显示整个画布的图像时,并且让子图自适应来显示。而我遇到了这个就是关于self.figure.tight_layout()的警告,见下图。' E5 R0 w$ g% V# Y
$ K( Y# X% A. @" Y( J! ^5 ]/ Z5 c0 I一般在使用plt创建一个画布后,程序本身会有一个自动调整子图尺寸来使用画布的情况,但是因为我是显示图片,所以这个自适应就出问题了。但是还好,只是警告,不是报错,为了方便,忽略就好…(但是我不推荐这种做法,希望有人研究一下,并把解决问题告诉我)4 v" v9 Q; f7 t" r
为了方便,我直接在一开始加上下面这句,忽略掉。 # O6 S, x* G$ o( Q4 @, `import warnings e6 `: U7 b) O1 q8 ^& h7 `3 { `
warnings.filterwarnings("ignore")3 a7 M, K" U, ]# k% a/ P
" V% ]% W3 z$ k6 z8 g! s要点 % z( G. V1 v4 T! u8 [' v. N' M6 o . L! \5 N+ _2 g; C* G# Q8 N5 C( l1旋转图像现成的工具很多,一个是cv2提供的,主要调用getRotationMatrix2D()函数和warpAffine()函数实现,绕图像的中心旋转。但是它是以坐标轴为基础,绕中心旋转。那么就会出现一个问题,旋转后超出边界的图像缺失,而没有图像覆盖的背景会很突兀。此方法效果见下图:2 f1 d D N. r& W! o6 X
& [. ^5 H( N6 I, q/ p4 ~* a. s- [" o5 \3 v2 ~ m& Y
这不符合我的要求,我希望的当然是连着画布一起旋转,就像ps一样,最后的成片不可能会有画布露出了。8 u6 F$ i: E6 [$ M& L
- i- L, ?+ E! ?这就有PIL提供的另一种Image.transpose()函数,参数提供90、180、270的旋转功能,并且这是连着画布一起旋转。再看名字transpose,转置,再结合np.transpose()的功能,就可以明白为什么只有这三个角度的操作了。这很符合我的需求。就用它了。此方法效果见下图 1 b7 I) r! _+ ]; g 6 N, O F, E* ~% I$ K- S 2 G) p/ r4 i J" V) w