Python-OpenCV基本操作方法詳解
基本屬性
cv2.imread(文件名,屬性) 讀入圖像
屬性:指定圖像用哪種方式讀取文件
cv2.IMREAD_COLOR:讀入彩色圖像,默認(rèn)參數(shù),Opencv 讀取彩色圖像為BGR模式 !?。∽⒁?/p>
cv2.IMREAD_GRAYSCALE:讀入灰度圖像。
cv2.imshow(窗口名,圖像文件) 顯示圖像
可以創(chuàng)建多個(gè)窗口
cv2.waitKey() 鍵盤(pán)綁定函數(shù)
函數(shù)等待特定的幾毫秒,看是否由鍵盤(pán)輸入。
cv2.namedWindow(窗口名,屬性) 創(chuàng)建一個(gè)窗口
屬性:指定窗口大小模式
cv2.WINDOW_AUTOSIZE:根據(jù)圖像大小自動(dòng)創(chuàng)建大小
cv2.WINDOW_NORMAL:窗口大小可調(diào)整
cv2.destoryAllWindows(窗口名) 刪除任何建立的窗口
代碼實(shí)例:
import cv2 img=cv2.imread('test.py',cv2.IMREAD_COLOR) cv2.namedWindow('image',cv2.WINDOW_NORMAL) cv2.imshow('image',img) cv2.waitKey(0) cv2.destoryAllWindows()
cv2.imwrite(保存圖像名,需保存圖像) 保存圖像
代碼實(shí)例:
import cv2 img=cv2.imread('test.png',0) cv2.imshow('image',img) k=cv2.waitKey(0) if k==27: #等待 ESC 鍵 cv2.destoryAllWindows() elif k==ord('s') #等待 's' 鍵來(lái)保存和退出 cv2.imwrite('messigray.png',img) cv2.destoryAllWindows()
對(duì)于圖像的一些操作
0x01. 獲取圖片屬性
import cv2 img=img.imread('test.png') print img.shape #(768,1024,3) print img.size #2359296 768*1024*3 print img.dtype #uint8
0x02. 輸出文本
在處理圖片時(shí),將一些信息直接以文字的形式輸出在圖片上
cv2.putText(圖片名,文字,坐標(biāo),文字顏色)
0x03. 縮放圖片
實(shí)現(xiàn)縮放圖片并保存,在使用OpenCV時(shí)常用的操作。cv2.resize()支持多種插值算法,默認(rèn)使用cv2.INTER_LINEAR,縮小最適合使用:cv2.INTER_AREA,放大最適合使用:cv2.INTER_CUBIC或cv2.INTER_LINEAR。
res=cv2.resize(image,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
或者:
res=cv2.resize(image,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
此處None本應(yīng)該是輸出圖像的尺寸,因?yàn)楹筮呍O(shè)置了縮放因子
0x04. 圖像平移
cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
平移就是將圖像換個(gè)位置,如果要沿(x,y)方向移動(dòng),移動(dòng)距離為(tx,ty),則需要構(gòu)建偏移矩陣M。
例如 平移圖片(100,50)
import cv2 img=cv2.imread('test.png',1) rows,cols,channel=img.shape M=np.float32([[1,0,100],[0,1,50]]) dst=cv2.warpAffine(img,M,(cols,rows)) cv2.imshow('img',dst) cv2.waitKey(0) cv2.destoryALLWindows()
其中 (cols,rows)代表輸出圖像的大小,M為變換矩陣,100代表x的偏移量,50代表y的偏移量,單位為像素。
0x05. 圖像旋轉(zhuǎn)
OpenCV中首先需要構(gòu)造一個(gè)旋轉(zhuǎn)矩陣,通過(guò)cv2.getRotationMatrix2D獲得。
import cv2 img=cv2.imread('test.png',0) rows,cols=img.shape #第一個(gè)參數(shù)為旋轉(zhuǎn)中心,第二個(gè)為旋轉(zhuǎn)角度,第三個(gè)為旋轉(zhuǎn)后的縮放因子 M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6) #第三個(gè)參數(shù)為圖像的尺寸中心 dst=cv2.warpAffine(img,M,(2*cols,2*rows)) cv2.imshow('img',dst) cv2.waitKey(0) cv2.destoryALLWindows()
0x06. 仿射變換
在仿射變換中,原圖中所有的平行線(xiàn)在結(jié)果圖像中同樣平行。為了創(chuàng)建偏移矩陣,需要在原圖像中找到三個(gè)點(diǎn)以及它們?cè)谳敵鰣D像中的位置。然后OpenCV中提供了cv2.getAffineTransform創(chuàng)建2*3的矩陣,最后將矩陣傳給函數(shù)cv2.warpAffine。
import cv2 import matplotlib.pyplot as plt import numpy as np img=cv2.imread('test.png') rows,cols,ch=img.shape pts1=np.float32([[50,50],[200,50],[50,200]]) pts2=np.float32([[10,100],[200,50],[100,250]]) M=cv2.getAffineTransform(pts1,pts2) dst=cv2.warpAffine(img,M,(cols,rows)) plt.subplot(121),plt.imshow(img),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show()
0x07. 透視變換
視角變換,需要一個(gè)3*3變換矩陣。在變換前后要保證直線(xiàn)還是直線(xiàn)。構(gòu)建此矩陣需要在輸入圖像中找尋4個(gè)點(diǎn),以及在輸出圖像中對(duì)應(yīng)的位置。這四個(gè)點(diǎn)中的任意三個(gè)點(diǎn)不能共線(xiàn)。變換矩陣OpenCV提供cv2.getPerspectiveTransform()構(gòu)建。然后將矩陣傳入函數(shù)cv2.warpPerspective。
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread('test.png') rows,cols,ch=img.shape pts1=np.float32([[56,65],[368,52],[28,387],[389,390]]) pts2=np.float32([[0,0],[300,0],[0,300],[300,300]]) M=cv2.getPerspectiveTransform(pts1,pts2) dst=cv2.warpPerspective(img,M,(300,300)) plt.subplot(121),plt.imshow(img),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show()
0x09. 圖像 regions of Interest
有時(shí)需要對(duì)一副圖像的特定區(qū)域進(jìn)行操作,ROI使用Numpy索引來(lái)獲得的。
import cv2 import numpy as np import matplotlib.pyplot as plt image=cv2.imread('test.png') rows,cols,ch=image.shape tall=image[0:100,300:700] image[0:100,600:1000]=tallall cv2.imshow("image",image) cv2.waitKey(0) cv2.destoryALLWindows()
0x10. 通道的拆分/合并處理
有時(shí)需要對(duì)BGR三個(gè)通道分別進(jìn)行操作。這時(shí)需要將BGR拆分成單個(gè)通道。同時(shí)有時(shí)需要把獨(dú)立通道的圖片合并成一個(gè)BGR圖像。
使用OpenCV庫(kù)函數(shù)版本
import cv2 import numpy as np import matplotlib.pyplot as plt image=cv2.imread('pitt1.jpg') rows,cols,ch=image.shape #拆分通道,cv2.split()是一個(gè)比較耗時(shí)的操作。只有需要時(shí)使用,盡量Numpy b,g,r=cv2.split(image) print b.shape #(768,1024) #合并通道 image=cv2.merge(b,g,r)
使用Numpy索引版本:
import cv2 import numpy as np import matplotlib.pyplot as plt image=cv2.imread('pitt1.jpg') rows,cols,ch=image.shape #直接獲取 b=img[:,:,0]
以上這篇Python-OpenCV基本操作方法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows下的pycharm安裝及其設(shè)置中文菜單
這篇文章主要介紹了windows下的pycharm安裝及其設(shè)置中文菜單,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-0411個(gè)Python3字典內(nèi)置方法大全與示例匯總
這篇文章主要給大家介紹了11個(gè)Python3字典內(nèi)置方法大全與示例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python基礎(chǔ)學(xué)習(xí)之時(shí)間轉(zhuǎn)換函數(shù)用法詳解
這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)之時(shí)間轉(zhuǎn)換函數(shù)用法,結(jié)合實(shí)例形式分析了Python常見(jiàn)的日期時(shí)間獲取、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2019-06-06Jupyter notebook 不自動(dòng)彈出網(wǎng)頁(yè)的解決方案
這篇文章主要介紹了Jupyter notebook 不自動(dòng)彈出網(wǎng)頁(yè)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05python項(xiàng)目--使用Tkinter的日歷GUI應(yīng)用程序
在 Python 中,我們可以使用 Tkinter 制作 GUI。如果你非常有想象力和創(chuàng)造力,你可以用 Tkinter 做出很多有趣的東西,希望本篇文章能夠幫到你2021-08-08PyQtGraph在pyqt中的應(yīng)用及安裝過(guò)程
這篇文章主要介紹了PyQtGraph在pyqt中的應(yīng)用,文中給大家介紹了pyqtgraph的主要用途及PyQtGraph的安裝過(guò)程,需要的朋友可以參考下2019-08-08Windows下將Python文件打包成.EXE可執(zhí)行文件的方法
這篇文章主要介紹了Windows下將Python文件打包成.EXE可執(zhí)行文件的方法,需要的朋友可以參考下2018-08-08python正則表達(dá)式之對(duì)號(hào)入座篇
正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯2018-07-07