標籤:vs2013 opencv python 影像處理
快樂蝦
http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)
歡迎轉載,但請保留作者資訊
1. OpenCV映像顯示
之前用cv2.imshow顯示映像,但這種方式無法顯示的視窗無法調整大小,當顯示的映像比較大的時候就無法看到完整的映像,因此我們先建立視窗再顯示映像:
import cv2img = cv2.imread(‘f:\\tmp\\cotton.jpg‘)win = cv2.namedWindow(‘test win‘, flags=0)cv2.imshow(‘test win‘, img)cv2.waitKey(0)
opencv採用視窗名稱來訪問視窗,而不是視窗控制代碼之類的東西。
flags為0表示視窗可以用滑鼠來改變大小,此時顯示的映像也跟著視窗大小變化,需要注意的是它可能會導致映像的變形:
cv2.namedWindow最終使用下面的c函數完成具體的功能:
/* create window */CVAPI(int) cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
這裡的flags可以接受的值為:
//These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty CV_WINDOW_NORMAL = 0x00000000, //the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size CV_WINDOW_AUTOSIZE = 0x00000001, //the user cannot resize the window, the size is constrainted by the image displayed CV_WINDOW_OPENGL = 0x00001000, //window with opengl support
2. matplotlib映像顯示
接下來試試用matplotlib顯示映像:
import cv2import matplotlib.pyplot as pltimg = cv2.imread(‘f:\\tmp\\cotton.jpg‘)plt.imshow(img)plt.show()
映像的顏色有誤:
將第1通道和第3通道交換後顯示:
import numpy as npimport cv2import matplotlib.pyplot as pltimg = cv2.imread(‘f:\\tmp\\cotton.jpg‘)(r, g, b)=cv2.split(img)img=cv2.merge([b,g,r])plt.imshow(img)plt.show()
這回正常了:
從前面可以看到cv2.imshow與plt.imshow的差異。cv2.imshow顯示的映像視窗難以按比例縮放,但如果用plt.imshow則需要交換第一個色彩通道和第三個色彩通道。
3. 用plt讀取映像
再比較一下plt.imread和cv2.imread的差別:
import numpy as npimport cv2import matplotlib.pyplot as pltimg1 = cv2.imread(‘f:\\tmp\\cotton.jpg‘)img2 = plt.imread(‘f:\\tmp\\cotton.jpg‘)plt.subplot(121)plt.imshow(img1)plt.subplot(122)plt.imshow(img2)plt.show()
上述代碼讀取同一張映像並用相同的方法顯示,差異還是在色彩通道上:
4. matplotlib顯示灰階圖
對於只有一個色彩通道的映像,matplotlib可以指定一個map,將單個色彩通道的映像轉換為彩色映像。
matplotlib支援下面的map。
In [8]: import matplotlib.cm as cmIn [9]: cm.cmap_dOut[9]: {u‘Accent‘: <matplotlib.colors.LinearSegmentedColormap at 0x22cbf50>, u‘Accent_r‘: <matplotlib.colors.LinearSegmentedColormap at 0x22d7150>,.......u‘winter‘: <matplotlib.colors.LinearSegmentedColormap at 0x22d7290>, u‘winter_r‘: <matplotlib.colors.LinearSegmentedColormap at 0x22cb910>}
選擇一個map進行顯示:
import numpy as npimport cv2import matplotlib.pyplot as pltimport matplotlib.cm as cmimg = plt.imread(‘f:\\tmp\\cotton.jpg‘)img = img[:,:,0]plt.subplot(121)plt.imshow(img)plt.subplot(122)#plt.colorbar()plt.imshow(img, cmap=cm.get_cmap(‘winter‘))plt.show()
結果如下:
??
Python影像處理(2):映像顯示