1. 程式人生 > >【python學習筆記】openCV包(1)影象操作

【python學習筆記】openCV包(1)影象操作

碎碎念

python中影象操作的包有很多,之前看過一個教識別的大佬的視訊用了openCV,所以今天也就選擇openCV進行學習啦。另外,感覺openCV可以在很多語言環境下使用啊,C,C++,PHP啥的。 這裡只是openCV包中的檔案操作的一些方法,不要小看這個部分,只要掌握了這部分,理論上已經可以解決所有的影象處理問題。剩下的演算法實現就是自己的事啦。畢竟這些內容已經可以進行畫素操作了,所以好好學習吧!

程式簡介

下面的程式碼片就是自己學習這些函式的一個路徑,看著書的介紹一邊碼程式碼一邊觀察執行效果。如果有疑問的話還可以順便測試一下。程式總體是實現了一個“灰度反轉”的功能。如果學過數字影象處理的同學應該對這個不陌生吧。這也是我今年開的一門新課。如果對圖形處理有興趣的同學,希望這篇文章可以幫你入門,另外別忘了學完之後動手實現一些基礎的影象處理哦。

#-------------------------openCV包---------------------- #
#| openCV是python的一個影象處理包,可以進行復雜的圖形處理,影象 	|#
#| 識別。本次學習openCV的幾個基本的影象處理方法,並嘗試做影象初級	|#
#| 變換。													|#
#------------------------------------------------------- #
import cv2

# cv2.imread("影象檔名",讀取方式 -1原始模式 0灰度模式 1預設彩色模式)
# 將影象檔案以n維陣列的形式讀入變數,灰度n=2,彩色n=3 (BGR排列)
img = cv2.imread("/Users/wch/Desktop/elephant.png",0) # 影象變數.shape() 獲取影象大小,以列表方式依次存放寬 長 # 座標是以左上角為零點,豎直方向向下為x,水平向右為y,這是影象處理的座標方式 x = img.shape[0] y = img.shape[1] # cv2.namedWindow("視窗名",視窗標示) 建立一個視窗,用來承載畫布 # # 視窗標示有:cv2.WINDOW_AUTOSIZE 自適應固定視窗(預設) 1 # cv2.WINDOW_FREERATIO 影象鋪滿視窗可任意比例調節 256 # cv2.WINDOW_FULLSCREEN 全螢幕不可調節視窗 1
# cv2.WINDOW_KEEPRATIO 保持影象比例可調節 0 # cv2.WINDOW_NORMAL 視窗大小可變 0 # cv2.WINDOW_OPENGL 支援OpenGL的視窗 4096 # 所有標示可以用print直接列印其值,使用值相同的標示建立的視窗屬性也相同 cv2.namedWindow("img1",cv2.WINDOW_FREERATIO) # cv2.imshow("視窗名",圖形變數) 將影象顯示在指定視窗 cv2.imshow("img1",img) # 依次修改每個畫素,使得灰度值與原圖互補(灰度反轉) # for a in range(x): # for b in range(y): # img[a][b] = 255 - img[a][b] img = 255 - img cv2.namedWindow("img2") cv2.imshow("img2",img) # cv2.imwrite("存檔路徑",圖形變數,[標示,值]) # cv2.IMWRITE_JPEG_QUALITY jpg或jpeg格式檔案質量 # 同理可以設定 webp(0-100) 檔案質量 # cv2.IMWRITE_PNG_COMPRESSION 設定壓縮比例,預設3,值0-9 cv2.imwrite("/Users/wch/Desktop/changed.jpeg",img,[cv2.IMWRITE_JPEG_QUALITY,93]) # cv2.waitKey(引數) 延遲函式,經測試,引數是最長等待時間,0為無窮大。 # 在等待時間內按下任意鍵可以結束等待 cv2.waitKey(0) # cv2.destroyAllWindows() 銷燬所有視窗 注意大小寫 # cv2.destroyWindow("視窗名") 可以銷燬指定視窗 cv2.destroyAllWindows()