永興的筆記-OpenCV-1基本操作

OpenCV是什麼?
OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。
本文專欄將會與您一起學習OpenCV-Python

#建議在pip中安裝OpenCV-python
pip install opencv-python
#也可中anconda環境中安裝
conda install opencv

圖片建議單擊打開閱讀:
在這裏插入圖片描述

1、圖像的讀取:
cv2.imread(filename,flags=None)

  • filename : 圖片的路徑
  • flags : 讀取模式
flags 描述
cv2.IMREAD_COLOR 加載三通道彩色圖像,忽略透明度
cv2.IMREAD_GRAYSCALE 灰度模式加載圖像
cv2.IMREAD_UNCHANGED 使用alpha通道加載圖像,顯示圖像的透明度和半透明度(4通道)

阿爾法通道:是指一張圖片的透明和半透明度。一個使用32位存儲的圖片,每8位表示紅綠藍,和阿爾法通道。在這種情況下,就不光可以表示透明還是不透明,阿爾法通道還可以表示256級的半透明度。
2、圖像的顯示:
cv2.imshow(winname,mat)

  • winname :圖像顯示的窗口名
  • mat :需要顯示的圖片的對象名

3、等待任意按鍵:
cv2.waitKey(delay=None)

  • delay : 延時的時間
    當 dalay = 0 :表示 forever 永不退出
    dalay 的單位爲: 毫秒
    ord(c )
  • c:字符
    轉換爲 Unicode 值
    在這裏插入圖片描述
    ESC鍵的 ASCLL 值爲 27
    #圖像等待 delay>0: 延時 單位爲毫秒 delay<=0: 無限等待鍵盤輸入

4、關閉窗口:
關閉所有窗口:
cv2.destroyAllWindows()
關閉指定窗口:
destroyWindows(wname)

5、圖像的保存:
cv2.imwrite(filename,img,params=None)

  • filename : 文件夾的路徑
  • params:此參數針對特定的圖片格式
    對於JPEG,其表示的是圖像的質量,用0-100的整數表示,默認爲95。 注意,cv2.IMWRITE_JPEG_QUALITY類型爲Long,必須轉換成int
    PNG,第三個參數表示的是壓縮級別。cv2.IMWRITE_PNG_COMPRESSION,從0到9,壓縮級別越高,圖像尺寸越小。默認級別爲3:
import cv2
img1 = cv2.imread("first.jpg")
cv2.imshow("windowsimg1",img1)
print(chr(27))
k = cv2.waitKey()
if k == 27 :
    print("1")
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite("second.jpg",img1)
    cv2.destroyAllWindows()

6、圖像通道的分離與合併:
一般情況下圖片通道的排序爲:RGB 。 但是在OpenCV中默認的排序爲 BGR
分離通道:
cv2.split(m,mv=None)

  • m:需要分離通道的圖像對象
import cv2
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
b,g,r = cv2.split(img) #彩色圖像三通道,灰度圖像單通道
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
cv2.waitKey()
cv2.destroyAllWindows()

7、獲取圖像屬性:
image.shape
(行數,列數,通道數)
image.size
輸出圖像像素總和

import cv2
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
print(img.shape)
print(img.size)

生成全0數組:
np.zeros(shape,dtype=float)

  • shape:數組的屬性
  • dtype:類型

8、合併通道
cv2.merge(mv,dst=None)

  • mv:合併的通道
import cv2
import numpy as np
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
zreo = np.zeros(img.shape[:2],dtype="uint8") #大小與img圖像相同的生成二階全0數組
#格式爲uint8否則imshow不能顯示
b,g,r = cv2.split(img)
cv2.imshow("blue",cv2.merge([b,zreo,zreo]))
cv2.imshow("green",cv2.merge([zreo,g,zreo]))
cv2.imshow("red",cv2.merge([zreo,zreo,r]))
cv2.waitKey()
cv2.destroyAllWindows()

5、ROI感興趣區域:
簡單來說就是進行圖像數組切片,獲取感興趣區域

import cv2
img = cv2.imread("first.jpg")
imgROI = img[123:412,234:879] #設置感興趣區域
cv2.imshow("ROI",imgROI)
cv2.waitKey()
cv2.destroyAllWindows()

練習題:
分別以彩色模式和灰度模型讀取一幅圖像,分離出彩色圖像的RGB通道得到3副圖像,然後依次顯示出4副圖像,顯示圖像時按s保存圖像,圖像名稱爲該圖像的顏色,最後合成通道顯示彩色圖像,按 “q”鍵關閉後,然後顯示你感興趣的RIO區域,按ESC鍵關閉。最後輸出圖像的屬性。

評論出你的答案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章