【python學習筆記】openCV包(1)影象操作
阿新 • • 發佈:2018-12-14
碎碎念
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()