首頁 > web前端 > js教程 > 主體

Python-OpenCV基本操作方法詳解_python

不言
發布: 2018-04-02 16:33:51
原創
4400 人瀏覽過

下面小編就為大家分享一篇Python-OpenCV基本操作方法詳解,具有很好的參考價值,希望對大家有幫助。一起跟著小編過來看看吧

基本屬性

#cv2.imread(檔名,屬性) 讀入圖片

屬性:指定影像用哪種方式讀取檔案

cv2.IMREAD_COLOR:讀入彩色影像,預設參數,Opencv 讀取彩色影像為BGR模式! ! !注意

cv2.IMREAD_GRAYSCALE:讀入灰階影像。

cv2.imshow(視窗名,影像檔案) 顯示影像

可以建立多個視窗

cv2.waitKey() 鍵盤綁定函數

函數等待特定的幾毫秒,看是否由鍵盤輸入。

cv2.namedWindow(視窗名,屬性) 建立一個視窗

#屬性:指定視窗大小模式

cv2.WINDOW_AUTOSIZE:根據圖片大小自動建立大小

cv2.WINDOW_NORMAL:視窗大小可調整

cv2.destoryAllWindows(視窗名稱) 刪除任何已建立的視窗

程式碼實例:

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(儲存映像名,需儲存映像) 儲存映像

程式碼實例:

 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' 键来保存和退出
  cv2.imwrite('messigray.png',img)
  cv2.destoryAllWindows()
登入後複製

對於圖像的一些操作

#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. 輸出文字

在處理圖片時,將一些訊息直接以文字的形式輸出在圖片上

cv2.putText(圖片名,文字,座標,文字顏色)

#0x03. 縮放圖片

#實現縮放圖片並保存,在使用OpenCV時常用的操作。 cv2.resize()支援多種插值演算法,預設使用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本來應該是輸出影像的尺寸,因為後邊設定了縮放因子

0x04. 影像平移

cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
登入後複製

#.平移就是將影像換個位置,若要沿(x,y)方向移動,移動距離為(tx,ty),則需要建構偏移矩陣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. 影像旋轉

#OpenCV中首先需要建構一個旋轉矩陣,透過cv2.getRotationMatrix2D獲得。

import cv2
img=cv2.imread('test.png',0)
rows,cols=img.shape
#第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)
#第三个参数为图像的尺寸中心
dst=cv2.warpAffine(img,M,(2*cols,2*rows))
cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destoryALLWindows()
登入後複製

0x06. 仿射變換

在仿射變換中,原圖中所有的平行線在結果影像中同樣平行。為了建立偏移矩陣,需要在原始影像中找到三個點以及它們在輸出影像中的位置。然後OpenCV中提供了cv2.getAffineTransform創建2*3的矩陣,最後將矩陣傳給函數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.透視變換

#視角變換,需要一個3*3變換矩陣。在變換前後要確保直線還是直線。建構此矩陣需要在輸入影像中找出4個點,以及在輸出影像中對應的位置。這四個點中的任三個點不能共線。變換矩陣OpenCV提供cv2.getPerspectiveTransform()建置。然後將矩陣傳入函數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

#有時需要對一副影像的特定區域進行操作,ROI使用Numpy索引來獲得的。

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. 通道的分割/合併處理

有時需要對BGR三個通道分別進行操作。這時需要將BGR拆分成單一頻道。同時有時需要把獨立頻道的圖片合併成一個BGR影像。

使用OpenCV函式庫函數版本

import cv2
import numpy as np
import matplotlib.pyplot as plt

image=cv2.imread('pitt1.jpg')
rows,cols,ch=image.shape
#拆分通道,cv2.split()是一个比较耗时的操作。只有需要时使用,尽量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基本操作方法詳解_python的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!