opencv——基礎篇


 

一 . opencv是什么及其作用?

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

  鑒於本人的工作環境主要是采用python作為開發工具,故本篇博客是基於python來做的學習記錄。

 

二 . 環境依賴和opencv包

  •   環境:python3.7+windows10
  •   包:opencv-python、opencv-contrib-python
  •   說明:裝好python以后,直接在cmd里面使用pip install 即可,若遇見下載速度過慢或超時的情況,建議換個pip源,使用方式如:pip install package -i  https://pypi.tuna.tsinghua.edu.cn/simple/

 

三 . 基本使用

  前提:准備若干張圖片到本地

                                          

   都知道一張圖片是由很多個像素點組成,對於計算機而言,最終呈現在用戶面前的是由每個像素點的值所決定(0~255),0對應黑色,255對應白色。我們在生活中通常接觸的都是彩色圖片,由RGB三通道共同構成一張上面的彩色圖片,每一個通道對應的像素值反映出其亮度(三個通道可以理解成三個矩陣)。而灰度圖像通常只有一個顏色通道來表現。

 

1. 讀取圖片,將其轉換為數組

from matplotlib import pyplot as pyl
import cv2
import numpy

img = cv2.imread("cat.jpg")  #img是一個numpy.ndarray對象,默認是以BGR三通道讀取圖片數據(三維數組)
#img_gray = cv2.imread("cat.jpg",cv2.IMREAD_GRAYSCALE) 以灰度圖像方式讀取圖片數據(二維數組)

 

2. 數組數據轉換

img_BGR = cv2.imread("cat.jpg")
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  #將其轉換為灰度的二維數組數據

 

3. 數組數據窗口展示

img = cv2.imread("cat.jpg")

cv2.imshow("IMage",img)
cv2.waitKey(0)          # 按任意鍵關閉窗口,cv2.waitKey(1000) 延時一秒關閉窗口
cv2.destroyAllWindows()

 

4. 圖像保存

cv2.imwrite("mycat.jpg",img)

 

5. 圖像的截取

# 其實本質就是對np數組進行操作
img = cv2.imread("cat.jpg")
cv2.imshow("IMage",img[:100,:200])  # 取前100行,前200列的像素作為圖像展示

 

 6. BGR數據切片

img = cv2.imread("cat.jpg")

# 切片
b,g,r = cv2.split(img)   # 得到各自顏色通道的二維數組數據

# 合並
img = cv2.merge(b,g,r)   

 

 7 同樣大小的數組像素值運算

img = cv2.imread("cat.jpg")
img_2 = numpy.copy(img)


# np相加,像素值只要超過255,就減掉255,比如257,結果就為2
print(img[:3,:3,0]+img_2[:3,:3,0] ) 

# cv2相加,像素值超過255,就等於255
print(cv2.add(img[:3,:3,0],img_2[:3,:3,0]))

 

8 圖片的融合

img_cat = cv2.imread("cat.jpg")
img_dog = cv2.imread("dog.jpg")

ret = cv2.addWeighted(img_cat,0.2,img_dog,0.8,0)    # 數據后面的值決定圖片融合和所占的權重
cv2.imshow("IMage",ret)
cv2.waitKey(0)          # 按任意鍵關閉窗口,cv2.waitKey(1000) 延時一秒關閉窗口
cv2.destroyAllWindows()

# 如果圖片大小不一致,使用cv2.resize(img_xx,(300,200)) ————》轉換為np.shape = 200,300的數組

 

9 圖片的比例縮放

img_cat = cv2.imread("cat.jpg")

ret = cv2.resize(img_cat,(0,0),fx=3,fy=1) #橫向拉長三倍
ret2 = cv2.resize(img_cat,(0,0),fx=3,fy=3) #圖片擴大三倍

 

 結語:本來准備認真寫一下結尾的,畢竟作為博客園的新人,寫下第一篇學習筆記應當是值得紀念的一件事兒,不過想了想,這要是最后一篇那豈不是太尷尬了。嗯,作為一名不太合格的碼農,我大多時候是很抗拒寫筆記的,其實畢業工作也已經一年多了,一直也來也都知道一個好的學習習慣是多么重要。所以,我希望自己能改變的更快一點,能變得更加優秀,更加有底氣的去嘗試,去做自己覺得有意義真正想去做的事情。

                     —— 2019-09-10 00:14:45  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM