From: Jostein Bø F. <jos...@gm...> - 2012-04-07 15:26:04
|
I've had problems saving MxNx3 (RGB) numpy arrays as images using imsave. It fails with an exception, and the problem seems to be line 1243 in image.py: figsize = [x / float(dpi) for x in arr.shape[::-1]] The purpose of arr.shape[::-1] seems to be to reorder the height and width dimensions. It works as intended for MxN arrays, but not NxMx3 arrays -- they cause a function to complain about an argument too many. I have modified the above line to use (arr.shape[1], arr.shape[0]) instead of arr.shape[::-1], and that solves the problem for me, and I get the output I expect (and the code still passes all tests it should pass). However, there could very well be subtleties in the codebase that I don't know about. The attached patches add a simple test case, the above mentioned change and a few updates to the documentation of imsave. Best, Jostein. |
From: Benjamin R. <ben...@ou...> - 2012-04-16 21:00:59
|
On Sat, Apr 7, 2012 at 11:25 AM, Jostein Bø Fløystad < jos...@gm...> wrote: > I've had problems saving MxNx3 (RGB) numpy arrays as images using > imsave. It fails with an exception, and the problem seems to be line > 1243 in image.py: > > figsize = [x / float(dpi) for x in arr.shape[::-1]] > > The purpose of arr.shape[::-1] seems to be to reorder the height and > width dimensions. It works as intended for MxN arrays, but not NxMx3 > arrays -- they cause a function to complain about an argument too > many. > > I have modified the above line to use (arr.shape[1], arr.shape[0]) > instead of arr.shape[::-1], and that solves the problem for me, and I > get the output I expect (and the code still passes all tests it should > pass). However, there could very well be subtleties in the codebase > that I don't know about. > > The attached patches add a simple test case, the above mentioned > change and a few updates to the documentation of imsave. > > Best, > > Jostein. > > Jostein, That second patch certain fixes that part of the bug, but I still can't save an NxMx3 (or 4) array using imsave(). Are you sure this is all of the patch? I get the following exception: ``` Traceback (most recent call last): File "quickshow.py", line 106, in <module> plt.imsave(stem + '.png', cm(d)) File "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/pyplot.py", line 1757, in imsave return _imsave(*args, **kwargs) File "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/image.py", line 1244, in imsave fig = Figure(figsize=figsize, dpi=dpi, frameon=False) File "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/figure.py", line 269, in __init__ self.bbox_inches = Bbox.from_bounds(0, 0, *figsize) TypeError: from_bounds() takes exactly 4 arguments (5 given) ``` Cheers! Ben Root |
From: Jostein Bø F. <jos...@gm...> - 2012-04-17 07:30:47
|
Hi Benjamin, and thanks for looking into this. The traceback you showed in your post is the original one that I see before applying the second patch. After applying the second patch, I do not see this traceback any more, and I get the results I expect. In other words, I'm unable to reproduce the behaviour you get (with the patches applied to current master). Would it be possible for you to send the code in quickshow.py that triggers this behaviour? You seemed uncertain that you had the full patch. The second patch only changes a single line of code, namely line 1243 of image.py. An excerpt of the patch: - figsize = [x / float(dpi) for x in arr.shape[::-1]] + figsize = [x / float(dpi) for x in (arr.shape[1], arr.shape[0])] For me, this is enough to make imshow work for MxNx3 (or 4). Cheers, Jostein. Den 23:00 16. april 2012 skrev Benjamin Root <ben...@ou...> følgende: > > On Sat, Apr 7, 2012 at 11:25 AM, Jostein Bø Fløystad > <jos...@gm...> wrote: >> >> I've had problems saving MxNx3 (RGB) numpy arrays as images using >> imsave. It fails with an exception, and the problem seems to be line >> 1243 in image.py: >> >> figsize = [x / float(dpi) for x in arr.shape[::-1]] >> >> The purpose of arr.shape[::-1] seems to be to reorder the height and >> width dimensions. It works as intended for MxN arrays, but not NxMx3 >> arrays -- they cause a function to complain about an argument too >> many. >> >> I have modified the above line to use (arr.shape[1], arr.shape[0]) >> instead of arr.shape[::-1], and that solves the problem for me, and I >> get the output I expect (and the code still passes all tests it should >> pass). However, there could very well be subtleties in the codebase >> that I don't know about. >> >> The attached patches add a simple test case, the above mentioned >> change and a few updates to the documentation of imsave. >> >> Best, >> >> Jostein. >> > > Jostein, > > That second patch certain fixes that part of the bug, but I still can't save > an NxMx3 (or 4) array using imsave(). Are you sure this is all of the > patch? > > I get the following exception: > > ``` > Traceback (most recent call last): > File "quickshow.py", line 106, in <module> > plt.imsave(stem + '.png', cm(d)) > File > "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/pyplot.py", > line 1757, in imsave > return _imsave(*args, **kwargs) > File > "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/image.py", > line 1244, in imsave > fig = Figure(figsize=figsize, dpi=dpi, frameon=False) > File > "/home/broot/.local/lib/python2.7/site-packages/matplotlib-1.2.x-py2.7-linux-x86_64.egg/matplotlib/figure.py", > line 269, in __init__ > self.bbox_inches = Bbox.from_bounds(0, 0, *figsize) > TypeError: from_bounds() takes exactly 4 arguments (5 given) > ``` > > Cheers! > Ben Root > |
From: Benjamin R. <ben...@ou...> - 2012-04-17 13:00:09
|
On Tue, Apr 17, 2012 at 3:30 AM, Jostein Bø Fløystad < jos...@gm...> wrote: > Hi Benjamin, > > and thanks for looking into this. The traceback you showed in your > post is the original one that I see before applying the second patch. > After applying the second patch, I do not see this traceback any more, > and I get the results I expect. In other words, I'm unable to > reproduce the behaviour you get (with the patches applied to current > master). Would it be possible for you to send the code in quickshow.py > that triggers this behaviour? > > You seemed uncertain that you had the full patch. The second patch > only changes a single line of code, namely line 1243 of image.py. An > excerpt of the patch: > > - figsize = [x / float(dpi) for x in arr.shape[::-1]] > + figsize = [x / float(dpi) for x in (arr.shape[1], arr.shape[0])] > > For me, this is enough to make imshow work for MxNx3 (or 4). > > Cheers, > > Jostein. > > Josten, Sorry for the noise. I forgot to install the patched version of mpl. Your second patch certainly does fix the bug and should be committed. As for the first patch that has the test, I think it would be better to actually create some test data and test image. I am working on creating such a test set for a related bug in imshow() and imsave(). Once I do that, I can make a pull request that can include both our patches. Cheers! Ben Root |
From: Jostein Bø F. <jos...@gm...> - 2012-04-17 14:02:37
|
Ben, That sounds great, especially regarding the test images. I don't know how the image comparison tests work, that's why I kept it very fundamental. Thanks! Jostein. Den 14:59 17. april 2012 skrev Benjamin Root <ben...@ou...> følgende: > > > On Tue, Apr 17, 2012 at 3:30 AM, Jostein Bø Fløystad > <jos...@gm...> wrote: >> >> Hi Benjamin, >> >> and thanks for looking into this. The traceback you showed in your >> post is the original one that I see before applying the second patch. >> After applying the second patch, I do not see this traceback any more, >> and I get the results I expect. In other words, I'm unable to >> reproduce the behaviour you get (with the patches applied to current >> master). Would it be possible for you to send the code in quickshow.py >> that triggers this behaviour? >> >> You seemed uncertain that you had the full patch. The second patch >> only changes a single line of code, namely line 1243 of image.py. An >> excerpt of the patch: >> >> - figsize = [x / float(dpi) for x in arr.shape[::-1]] >> + figsize = [x / float(dpi) for x in (arr.shape[1], arr.shape[0])] >> >> For me, this is enough to make imshow work for MxNx3 (or 4). >> >> Cheers, >> >> Jostein. >> > > Josten, > > Sorry for the noise. I forgot to install the patched version of mpl. Your > second patch certainly does fix the bug and should be committed. As for the > first patch that has the test, I think it would be better to actually create > some test data and test image. I am working on creating such a test set for > a related bug in imshow() and imsave(). Once I do that, I can make a pull > request that can include both our patches. > > Cheers! > Ben Root > |
From: Benjamin R. <ben...@ou...> - 2012-09-09 19:24:48
|
On Tue, Apr 17, 2012 at 10:02 AM, Jostein Bø Fløystad < jos...@gm...> wrote: > Ben, > > That sounds great, especially regarding the test images. I don't know > how the image comparison tests work, that's why I kept it very > fundamental. > > Thanks! > > Jostein. > > Just rediscovered this. I will go ahead and create the PR so that this gets included in v1.2.0. Ben Root |
From: Benjamin R. <ben...@ou...> - 2012-09-09 20:41:02
|
On Sun, Sep 9, 2012 at 3:24 PM, Benjamin Root <ben...@ou...> wrote: > > > On Tue, Apr 17, 2012 at 10:02 AM, Jostein Bø Fløystad < > jos...@gm...> wrote: > >> Ben, >> >> That sounds great, especially regarding the test images. I don't know >> how the image comparison tests work, that's why I kept it very >> fundamental. >> >> Thanks! >> >> Jostein. >> >> > Just rediscovered this. I will go ahead and create the PR so that this > gets included in v1.2.0. > > Ben Root > Submitted as PR #1224: https://github.com/matplotlib/matplotlib/pull/1224 Cheers! Ben Root |