国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python-OpenCV基本操作方法詳解

2020-01-04 15:29:57
字體:
來源:轉載
供稿:網友

基本屬性

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 cv2img=img.imread('test.png')print img.shape#(768,1024,3)print img.size#2359296 768*1024*3print 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。

Python,OpenCV

例如 平移圖片(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 cv2img=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 cv2import matplotlib.pyplot as pltimport numpy as npimg=cv2.imread('test.png')rows,cols,ch=img.shapepts1=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()

Python,OpenCV

0x07. 透視變換

視角變換,需要一個3*3變換矩陣。在變換前后要保證直線還是直線。構建此矩陣需要在輸入圖像中找尋4個點,以及在輸出圖像中對應的位置。這四個點中的任意三個點不能共線。變換矩陣OpenCV提供cv2.getPerspectiveTransform()構建。然后將矩陣傳入函數cv2.warpPerspective。

import cv2import numpy as npimport matplotlib.pyplot as pltimg=cv2.imread('test.png')rows,cols,ch=img.shapepts1=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()

Python,OpenCV

0x09. 圖像 regions of Interest

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

import cv2import numpy as npimport matplotlib.pyplot as pltimage=cv2.imread('test.png')rows,cols,ch=image.shapetall=image[0:100,300:700]image[0:100,600:1000]=tallallcv2.imshow("image",image)cv2.waitKey(0)cv2.destoryALLWindows()

Python,OpenCV

0x10. 通道的拆分/合并處理

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

使用OpenCV庫函數版本

import cv2import numpy as npimport matplotlib.pyplot as pltimage=cv2.imread('pitt1.jpg')rows,cols,ch=image.shape#拆分通道,cv2.split()是一個比較耗時的操作。只有需要時使用,盡量Numpyb,g,r=cv2.split(image)print b.shape#(768,1024)#合并通道image=cv2.merge(b,g,r)

使用Numpy索引版本:

import cv2import numpy as npimport matplotlib.pyplot as pltimage=cv2.imread('pitt1.jpg')rows,cols,ch=image.shape#直接獲取b=img[:,:,0]

以上這篇Python-OpenCV基本操作方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰来县| 从化市| 镇平县| 子长县| 江北区| 神农架林区| 鹤庆县| 盐亭县| 巫溪县| 通渭县| 长岭县| 延吉市| 临汾市| 清丰县| 南城县| 鄄城县| 晋江市| 桦甸市| 宣化县| 唐海县| 望城县| 壤塘县| 兴业县| 行唐县| 晴隆县| 密云县| 成武县| 高碑店市| 闻喜县| 西乌珠穆沁旗| 邢台市| 灵宝市| 泸溪县| 乌鲁木齐市| 黄梅县| 寻乌县| 尉氏县| 富蕴县| 蓬安县| 咸阳市| 天等县|