何時出現錯誤提示 :”Clipping input data to the valid range for imshow with RGB data ([0…1] for floats or [0…255] for integers)”?
在Python中,使用 matplotlib 的函式:plt.imshow(ndarray) 將輸入陣列顯示為彩色 ( RGB ) 影像時,
而且,只在處理彩色影像時出現錯誤提示,顯示為空白影像;處理灰度影像時函式運行正常、顯示影像,
原因
plt.imshow() 函式設定:
-
對于二維陣列(灰度影像),函式會自動將輸入資料歸一化變換至[0,1],然后顯示,
-
對于三維陣列(彩色影像),plt.imshow() 函式并不會自動對輸入資料歸一化處理,而是對資料取值范圍提出要求:如果是float型資料,取值范圍應在[0,1];如果是int型資料,取值范圍應在[0,255],
我遇到的情況是:在之前的資料處理步驟有一些矩陣運算,資料型別變為 float64 型,輸入二維陣列(顯示為灰度影像)時,因為函式會進行歸一化處理,不受影響,輸入三維陣列(顯示為彩色影像)時,就需要先轉換到相應的資料型別和取值范圍,才能在 plt.imshow() 函式中正常顯示,
解決方法
方法一:plt.imshow(ndarray.astype(‘uint8’))
將 float 型資料截短轉換成 uint8 型資料,
方法二:plt.imshow(ndarray/255)
將資料縮放到[0,1],
但是,我在學習一個NumPy例子時(先對資料做奇異值分解( SVD ),再還原影像,用 plt.imshow() 顯示),發現還原后有一小部分 ndarray 資料有負值,因此縮放后資料的取值區間是[-1,1],使用 plt.imshow() 函式時仍然會顯示上述錯誤提示,但是此時影像可以顯示,可能是因為負值點只占極少數?所以我推薦方法一,可以保證輸入陣列符合 uint 型取值范圍,
參考
1.對方法一的介紹:https://blog.csdn.net/shizheng_Li/article/details/116492692
2.介紹方法一及問題分析:https://stackoverflow.com/questions/49643907/clipping-input-data-to-the-valid-range-for-imshow-with-rgb-data-0-1-for-floa
3.imshow函式介紹:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imshow.html
4.對方法二的介紹:https://blog.csdn.net/aaon22357/article/details/82736792
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302316.html
標籤:其他
上一篇:OpenCV------實作列印手指運動① 2021 9 21
下一篇:零基礎新人如何轉行做新媒體運營?
