Ⅰ python opencv中imshow輸出圖像太大,如何調整輸出尺寸
通過resize重置圖片尺寸
參數:圖片,輸出圖片尺寸(一般我不用這個,我傳None),寬的比例,高的比例
例子:將圖片img,縮小一半顯示,那麼寬高為原尺寸的0.5倍
img = cv2.resize(img,None,fx=0.5,fy=0.5)
設置完尺寸後再顯示
cv2.imshow('img',img)
cv2.waitKey(0)
.......
希望我的回答對你有幫助!
Ⅱ Python的各種imread函數在實現方式和讀取速度上有何區別
1. PIL.Image.open
代碼在這里:Pillow/Image.py at 3.1.x · python-pillow/Pillow · GitHub
open() 函數打開圖像,但並不讀入,直到有操作發生。
具體的讀取操作是在 ImageFile.py 寫的。大體流程是先檢測文件類型,整塊地讀入文件內容,然後調用解碼器解碼,做了很多優化,效率應該還是很高的。
2. scipy.ndimage.imread
代碼在這里:scipy/io.py at v0.17.1 · scipy/scipy · GitHub
imread 調用 scipy.misc.pilutil.imread。從名字就能看出來其實調用的還是 Pillow。
根據 pilutil 代碼:scipy/pilutil.py at v0.17.1 · scipy/scipy · GitHub
確實是調用 pil.image.open(),然後返回一個 fromimage()。
3. scipy.misc.imread
misc 的 __init__.py 在這里:scipy/__init__.py at v0.17.1 · scipy/scipy · GitHub
調用的還是 pilutil 中的 imread
相關代碼如下
try:
from .pilutil import *
from . import pilutil
__all__ += pilutil.__all__
del pilutil
except ImportError:
pass
也算是學了一招,從 pilutil 導入其所有函數添加到當前空間,然後又刪除了 pilutil 消除影響。
4. skimage.io.imread
代碼在這里:scikit-image/_io.py at master · scikit-image/scikit-image · GitHub
是通過插件 plugin 來讀入不同的文件,而且會試用幾個不同的 plugins 來找到合適的。
使用 call_plugin 來調用,代碼在這里:scikit-image/manage_plugins.py at master · scikit-image/scikit-image · GitHub
可以根據如下代碼查看插件調用的優先順序
# For each plugin type, default to the first available plugin as defined by
# the following preferences.
preferred_plugins = {
# Default plugins for all types (overridden by specific types below).
'all': ['pil', 'matplotlib', 'qt', 'freeimage'],
'imshow': ['matplotlib'],
'imshow_collection': ['matplotlib']
}
plugins 的源代碼在這里:scikit-image/skimage/io/_plugins at master · scikit-image/scikit-image · GitHub。可以看到 pil 的 imread,是用 open 打開圖像之後,再轉換成 ndarray。
5. cv2.imread
這里是調用的 CV::imread(),代碼在這里:opencv/loadsave.cpp at master · opencv/opencv · GitHub。一般來說 C\C++ 的實現,應該比 python 速度快一點。
6. matplotlib.image.imread
matplotlib 的文檔裡面說,matplotlib 原生只可以讀取 PNG 文件,有 PIL 的時候,可以讀取其他類型的文件。如果使用 URL 打開在線圖像文件,需要符合 PIL 的文檔要求。
matplotlib.image.imread 的代碼在這里:matplotlib/image.py at master · matplotlib/matplotlib · GitHub。matplotlib 的原生 PNG 讀取和寫入,是用 C 實現的,代碼在這里:matplotlib/_png.cpp at master · matplotlib/matplotlib · GitHub。
matplotlib 是先用 pil 的 open 打開圖像,如果格式是 png,就用原生方法打開。相關代碼如下:
handlers = {'png': _png.read_png, }
if format is None:
if cbook.is_string_like(fname):
parsed = urlparse(fname)
# If the string is a URL, assume png
if len(parsed.scheme) > 1:
ext = 'png'
else:
basename, ext = os.path.splitext(fname)
ext = ext.lower()[1:]
elif hasattr(fname, 'name'):
basename, ext = os.path.splitext(fname.name)
ext = ext.lower()[1:]
else:
ext = 'png'
else:
ext = format
if ext not in handlers:
im = pilread(fname)
if im is None:
raise ValueError('Only know how to handle extensions: %s; '
'with Pillow installed matplotlib can handle '
'more images' % list(six.iterkeys(handlers)))
return im
聲明的處理器只有 png。如果是 png 文件,調用 _png.read_png。如果不是 png 直接使用 pilread(就是用 pil 的 Image.open 然後 pil_to_array)。
matplotlib 的源碼確實比較復雜,一大部分主體是用 C 寫的,改動很激進,功能更新猛烈。
Ⅲ Python實操:手把手教你用Matplotlib把數據畫出來
作者:邁克爾·貝耶勒(Michael Beyeler)
如需轉載請聯系華章 科技
如果已安裝Anaconda Python版本,就已經安裝好了可以使用的 Matplotlib。否則,可能要訪問官網並從中獲取安裝說明:
http://matplotlib.org
正如使用np作為 NumPy 的縮寫,我們將使用一些標準的縮寫來表示 Matplotlib 的引入:
在本書中,plt介面會被頻繁使用。
讓我們創建第一個繪圖。
假設想要畫出正弦函數sin(x)的線性圖。得到函數在x坐標軸上0≤x<10內所有點的值。我們將使用 NumPy 中的 linspace 函數來在x坐標軸上創建一個從0到10的線性空間,以及100個采樣點:
可以使用 NumPy 中的sin函數得到所有x點的值,並通過調用plt中的plot函數把結果畫出來:
你親自嘗試了嗎?發生了什麼嗎?有沒有什麼東西出現?
實際情況是,取決於你在哪裡運行腳本,可能無法看到任何東西。有下面幾種可能性:
1. 從.py腳本中繪圖
如果從一個腳本中運行 Matplotlib,需要加上下面的這行調用:
在腳本末尾調用這個函數,你的繪圖就會出現!
2. 從 IPython shell 中繪圖
這實際上是互動式地執行Matplotlib最方便的方式。為了讓繪圖出現,需要在啟動 IPython 後使用所謂的%matplotlib魔法命令。
接下來,無須每次調用plt.show()函數,所有的繪圖將會自動出現。
3. 從 Jupyter Notebook 中繪圖
如果你是從基於瀏覽器的 Jupyter Notebook 中看這段代碼,需要使用同樣的%matplotlib魔法命令。然而,也可以直接在notebook中嵌入圖形,這會有兩種輸出選項:
在本書中,將會使用inline選項:
現在再次嘗試一下:
上面的命令會得到下面的繪圖輸出結果:
如果想要把繪圖保存下來留作以後使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:
僅需要確保你使用了支持的文件後綴,比如.jpg、.png、.tif、.svg、.eps或者.pdf。
作為本章最後一個測試,讓我們對外部數據集進行可視化,比如scikit-learn中的數字數據集。
為此,需要三個可視化工具:
那麼開始引入這些包吧:
第一步是載入實際數據:
如果沒記錯的話,digits應該有兩個不同的數據域:data域包含了真正的圖像數據,target域包含了圖像的標簽。相對於相信我們的記憶,我們還是應該對digits稍加 探索 。輸入它的名字,添加一個點號,然後按Tab鍵:digits.<TAB>,這個操作將向我們展示digits也包含了一些其他的域,比如一個名為images的域。images和data這兩個域,似乎簡單從形狀上就可以區分。
兩種情況中,第一維對應的都是數據集中的圖像數量。然而,data中所有像素都在一個大的向量中排列,而images保留了各個圖像8×8的空間排列。
因此,如果想要繪制出一副單獨的圖像,使用images將更加合適。首先,使用NumPy的數組切片從數據集中獲取一幅圖像:
這里是從1797個元素的數組中獲取了它的第一行數據,這行數據對應的是8×8=64個像素。下面就可以使用plt中的imshow函數來繪制這幅圖像:
上面的命令得到下面的輸出:
此外,這里也使用cmap參數指定了一個顏色映射。默認情況下,Matplotlib 使用MATLAB默認的顏色映射jet。然而,在灰度圖像的情況下,gray顏色映射更有效。
最後,可以使用plt的subplot函數繪制全部數字的樣例。subplot函數與MATLAB中的函數一樣,需要指定行數、列數以及當前的子繪圖索引(從1開始計算)。我們將使用for 循環在數據集中迭代出前十張圖像,每張圖像都分配到一個單獨的子繪圖中。
這會得到下面的輸出結果:
關於作者:Michael Beyeler,華盛頓大學神經工程和數據科學專業的博士後,主攻仿生視覺計算模型,用以為盲人植入人工視網膜(仿生眼睛),改善盲人的視覺體驗。 他的工作屬於神經科學、計算機工程、計算機視覺和機器學習的交叉領域。同時他也是多個開源項目的積極貢獻者。
本文摘編自《機器學習:使用OpenCV和Python進行智能圖像處理》,經出版方授權發布。
Ⅳ Python在調用cv2.imshow()時出現的問題
先到文末下載opencv的安裝包。其實這個安裝包就是一個解壓縮。
我們在安裝包解壓的目錄找到這個文件
把這個文件拷貝到python的包安裝目錄下面
在python的shell導入cv2模塊試試,看是不是安裝好了。結果提示還需要安裝一個依賴包
好吧,還好之前有這個numpy的安裝包,直接安裝
Ⅳ Python 3.6 + opencv 3.4 中imshow 函數報錯
看報錯信息,應該是你的img圖像數據載入錯誤導致img數據的width和height等於0,導致窗口顯示失敗。在使用imread函數載入圖像文件之後一定要通過img.empty()判斷一下文件載入是否正確,否則後面所有基於img做的操作都會報錯。
Ⅵ 在python Image中可以用show()來顯示圖片,但是顯示以後,下面的代碼就不運行了,如何運行下面的代碼
Image.show()函數是這個樣子的,必須先關了圖片程序才往下走。
不使用show,如imshow(BW)在 Matlab 7.0 中,二進制圖像是一個邏輯類,僅包括 0 和 1 兩個數值。像素 0 顯示為黑色,像素 1 顯示為白色。顯示時,也可通過NOT(~)命令,對二進制圖象進行取反,使數值 0 顯示為白色;1 顯示為黑色。
例如: imshow(~BW)
擴展資料:
不使用show函數來滿足運行的需求:
import threading
import Image
class ThreadClass(threading.Thread):
def run(self):
im=Image.open('z.jpg')
im.show()
print (1)
t = ThreadClass()
t.start()
print (2)
a=input('End')
#===============================
圖像的表示原理:
最基本的物理圖像是根據矩形網格抽樣原理從連續圖像域中抽取二維灰度陣列(矩陣)得到的。也可以用長向量表示二維灰度矩陣,它是按列(或行)掃描灰度矩陣,把下一列(或行)的頭和前一列(或行)的尾相接而成。
它們的線性可逆變換同樣可以用來表示圖像。圖像的每一行由行程(具有同一灰度的鄰近像元集合)序列所組成,因此也可以用行程長度編碼(見圖像編碼)表示圖像。
Ⅶ python plt.imshow 怎麼用
用法以既步驟:
1、給出一張圖片。
Ⅷ c#的窗口如何顯示python imshow函數的結果
1、把python里的imshow函數的結果,發消息到電腦系統消息裡面去,註:消息ID 唯一
2、C#窗口重寫接收系統消息函數,收到消息後,判斷 消息ID 是為一樣,一樣的話把內容取出來顯示即可
Ⅸ 怎麼用python顯示一張圖片
用python顯示一張圖片方法如下:
import matplotlib.pyplot as plt # plt 用於顯示圖片
import matplotlib.image as mpimg # mpimg 用於讀取圖片
import numpy as nplena = mpimg.imread('lena.png') # 讀取和代碼處於同一目錄下的 lena.png# 此時 lena 就已經是一個 np.array 了,可以對它進行任意處理
lena.shape #(512, 512, 3)plt.imshow(lena) # 顯示圖片plt.axis('off') # 不顯示坐標軸
plt.show()
Ⅹ python3中如何載入圖片
答: 如下所示。
import cv2
image = cv2.imread('./example.png')
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
image = mpimg.imread('./example.png')
print image.shape
plt.imshow(image) #調用imshow函數
在這里只是說了兩種方法,希望能夠幫助到你。