[Python影象處理] 一.影象處理基礎知識及OpenCV入門函式
該系列文章是講解Python OpenCV影象處理知識,前期主要講解影象入門、OpenCV基礎用法,中期講解影象處理的各種演算法,包括影象銳化運算元、影象增強技術、影象分割等,後期結合深度學習研究影象識別、影象分類應用。希望文章對您有所幫助,如果有不足之處,還請海涵~
同時推薦作者的C++影象系列知識:
[數字影象處理] 一.MFC詳解顯示BMP格式圖片
[數字影象處理] 二.MFC單文件分割視窗顯示圖片
[數字影象處理] 三.MFC實現影象灰度、取樣和量化功能詳解
[數字影象處理] 四.MFC對話方塊繪製灰度直方圖
[數字影象處理] 五.MFC影象點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
[數字影象處理] 六.MFC空間幾何變換之影象平移、映象、旋轉、縮放詳解
[數字影象處理] 七.MFC影象增強之影象普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解
本篇文章作為第一篇,將講解影象處理基礎知識和OpenCV入門函式,知識點如下:
1.影象基礎知識
2.OpenCV讀寫影象
3.OpenCV畫素處理
PS: 文章也學習了網易雲高登教育的知識,推薦大家學習。
PSS:2019年1~2月作者參加了CSDN2018年部落格評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index
一.影象基礎知識
影象都是由畫素(pixel)構成的,即影象中的小方格,這些小方格都有一個明確的位置和被分配的色彩數值,而這些一小方格的顏色和位置就決定該影象所呈現出來的樣子。畫素是影象中的最小單位,每一個點陣影象包含了一定量的畫素,這些畫素決定影象在螢幕上所呈現的大小。
影象通常包括二值影象、灰度影象和彩色影象。
1.二值影象
二值影象中任何一個點非黑即白,要麼為白色(畫素為255),要麼為黑色(畫素為0)。將灰度影象轉換為二值影象的過程,常通過依次遍歷判斷實現,如果畫素>=127則設定為255,否則設定為0。
2.灰度影象
灰度影象除了黑和白,還有灰色,它把灰度劃分為256個不同的顏色,影象看著也更為清晰。將彩色影象轉換為灰度圖是影象處理的最基本預處理操作,通常包括下面幾種方法:
(1) 浮點演算法:Gray=R0.3+G0.59+B0.11
(2) 整數方法:Gray=(R30+G59+B11)/100
(3) 移位方法:Gray=(R28+G151+B77)>>8;
(4) 平均值法:Gray=(R+G+B)/3;(此程式採用演算法)
(5) 僅取綠色:Gray=G;
(6) 加權平均值演算法:根據光的亮度特性,公式: R=G=B=R0.299+G*0.587+B0.144
通過上述任一種方法求得Gray後,將原來的RGB(R,G,B)中的R,G,B統一用Gray替換,形成新的顏色RGB(Gray,Gray,Gray),用它替換原來的RGB(R,G,B)就是灰度圖了。改變象素矩陣的RGB值,來達到彩色圖轉變為灰度圖。
3.彩色影象
彩色影象是RGB影象,RGB表示紅、綠、藍三原色,計算機裡所有顏色都是三原色不同比例組成的,即三色通道。
二.OpenCV讀寫影象
本文主要使用Python2.7和OpenCV進行講解,首先呼叫"pip install opencv-python"安裝OpenCV庫,如下圖所示:
1.讀入影象
OpenCV讀影象主要呼叫下面函式實現:
img = cv2.imread(檔名,[,引數])
引數(1) cv2.IMREAD_UNCHANGED (影象不可變)
引數(2) cv2.IMREAD_GRAYSCALE (灰度影象)
引數(3) cv2.IMREAD_COLOR (讀入彩色影象)
引數(4) cv2.COLOR_BGR2RGB (影象通道BGR轉成RGB)
2.顯示影象
顯示影象呼叫函式如下:
cv2.imshow(視窗名, 影象名)
3.視窗等待
呼叫函式如下:
cv2.waitKey(delay)
鍵盤繫結函式,共一個引數,表示等待毫秒數,將等待特定的幾毫秒,看鍵盤是否有輸入,返回值為ASCII值。如果其引數為0,則表示無限期的等待鍵盤輸入;引數>0表示等待delay毫秒;引數<0表示等待鍵盤單擊。
4.刪除所有視窗
呼叫函式如下:
cv2.destroyAllWindows() 刪除所有視窗
cv2.destroyWindows() 刪除指定的視窗
5.寫入圖片
呼叫函式如下:
retval = cv2.imwrite(檔案地址, 檔名)
下面程式碼是讀入圖片並顯示儲存。
# -*- coding:utf-8 -*-
import cv2
#讀取圖片
img = cv2.imread("test.jpg")
#顯示影象
cv2.imshow("Demo", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
#寫入影象
cv2.imwrite("testyxz.jpg", img)
輸出結果如下圖所示,並且在資料夾下儲存了一張名為“testyxz.jpg”的影象。
如果程式碼中沒有watiKey(0)函式,則執行結果如下圖所示:
同時
可以對程式碼進行升級,如下所示:
#無限期等待輸入
k=cv2.waitKey(0)
#如果輸入ESC退出
if k==27:
cv2.destroyAllWindows()
三.OpenCV畫素處理
1.讀取畫素
灰度影象直接返回灰度值,彩色影象則返回B、G、R三個分量。注意OpenCV讀取影象是BGR儲存顯示,需要轉換為RGB再進行影象處理。
灰度影象:返回值 = 影象(位置引數)
eg: test=img[88,42]
彩色影象:返回值 = 影象[位置元素, 0 | 1 | 2 ] 獲取BGR三個通道畫素
eg: blue=img[88,142,0] green=img[88,142,1] red=img[88,142,2]
2.修改影象
修改影象如果是灰度影象則直接賦值新畫素即可,彩色影象依次給三個值賦值即可。
灰度影象:
img[88,142] = 255
彩色影象:
img[88,142, 0] = 255
img[88,142, 1] = 255
img[88,142, 2] = 255
彩色影象:方法二
img[88,142] = [255, 255, 255]
下面程式碼是獲取畫素及修改的操作。
# -*- coding:utf-8 -*-
import cv2
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
test = img[88,142]
print test
img[88,142] = [255, 255, 255]
print test
#分別獲取BGR通道畫素
blue = img[88,142,0]
print blue
green = img[88,142,1]
print green
red = img[88,142,2]
print red
#顯示影象
cv2.imshow("Demo", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
#寫入影象
cv2.imwrite("testyxz.jpg", img)
輸出結果如下所示:
[158 107 64]
[255 255 255]
255
255
255
下面程式碼是將行為100到200、列150到250的畫素區域設定為白色。
# -*- coding:utf-8 -*-
import cv2
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#該區域設定為白色
img[100:200, 150:250] = [255,255,255]
#顯示影象
cv2.imshow("Demo", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
#寫入影象
cv2.imwrite("testyxz.jpg", img)
執行結果如下圖所示:
希望文章對大家有所幫助,如果有錯誤或不足之處,還請海涵。
(By:Eastmount 2018-08-16 夜11點 https://blog.csdn.net/Eastmount/)
相關文章
- [Python影象處理] 七.影象閾值化處理及演算法對比Python演算法
- [Python影象處理] 八.影象腐蝕與影象膨脹Python
- [Python影象處理] 三.獲取影象屬性、興趣ROI區域及通道處理Python
- [Python影象處理] 五.影象融合、加法運算及影象型別轉換Python型別
- 影象處理之影象增強
- [Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移Python
- 實戰 | 用Python做影象處理(一)Python
- [影象處理] Python+OpenCV實現車牌區域識別及Sobel運算元PythonOpenCV
- Python基礎教程:Day15-影象和辦公文件處理Python
- 【筆記】基於Python的數字影象處理筆記Python
- 數字影象處理DIP
- 數字影象處理-第一節
- Python 影像處理 OpenCV (1):入門PythonOpenCV
- 影象識別及處理相關資料集介紹
- [Python影象處理] 二.OpenCV+Numpy庫讀取與修改畫素PythonOpenCV
- 處理器基礎知識
- 影象中的畫素處理
- OpenCV與影像處理學習二——影像基礎知識(下)OpenCV
- 影象處理庫GPUImage簡單使用GPUUI
- [Python影象處理] 十一.灰度直方圖概念及OpenCV繪製直方圖Python直方圖OpenCV
- 影象處理的濾鏡演算法演算法
- Python基礎入門(7)- Python異常處理機制Python
- [Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算Python梯度
- [Python影象處理] 十.形態學之影象頂帽運算和黑帽運算Python
- Luminar 4 for MacOS影象後期處理軟體Mac
- [Python影象處理] 四.影象平滑之均值濾波、方框濾波、高斯濾波及中值濾波Python
- Python 影像處理 OpenCV (6):影像的閾值處理PythonOpenCV
- Python 影像處理 OpenCV (7):影像平滑(濾波)處理PythonOpenCV
- Python基礎 -- 異常處理Python
- [資料處理]python基礎Python
- 影像處理的基礎知識(11)——圖層(1)
- 影象處理1--傅立葉變換(Fourier Transform )ORM
- 如何在Tensorflow.js中處理MNIST影象資料JS
- Python入門之基礎知識(一)Python
- 【自然語言處理篇】--以NLTK為基礎講解自然語⾔處理的原理和基礎知識自然語言處理
- 影象處理入門:目標檢測和影象檢索綜述
- sklearn基礎及資料處理
- 影像處理的基礎知識(5)——繪製影像(1)