轉(zhuǎn):模塊cv2的用法
一、讀入圖像
使用函數(shù)cv2.imread(filepath,flags)讀入一副圖片
filepath:要讀入圖片的完整路徑
flags:讀入圖片的標(biāo)志
cv2.IMREAD_COLOR:默認(rèn)參數(shù),讀入一副彩色圖片,忽略alpha通道
cv2.IMREAD_GRAYSCALE:讀入灰度圖片
cv2.IMREAD_UNCHANGED:顧名思義,讀入完整圖片,包括alpha通道
eg.?
import cv2
img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
二、顯示圖像
使用函數(shù)cv2.imshow(wname,image)顯示圖像,第一個參數(shù)是顯示圖像的窗口的名字,第二個參數(shù)是要顯示的圖像(imread讀入的圖像)。窗口大小自動調(diào)整為圖片大小。
eg.
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()#dv2.destroyWindow(wname)
cv2.waitKey顧名思義等待鍵盤輸入,單位為毫秒,即等待指定的毫秒數(shù)看是否有鍵盤輸入,若在等待時間內(nèi)按下任意鍵則返回按鍵的ASCII碼,程序繼續(xù)運行。若沒有按下任何鍵,超時后返回-1。參數(shù)為0表示無限等待。不調(diào)用waitKey的話,窗口會一閃而逝,看不到顯示的圖片。
cv2.destroyAllWindow()銷毀所有窗口
cv2.destroyWindow(wname)銷毀指定窗口
三、保存圖像
使用函數(shù)cv2.imwrite(file,img,num)保存一個圖像。第一個參數(shù)是要保存的文件名,第二個參數(shù)是要保存的圖像。可選的第三個參數(shù),它針對特定的格式:對于JPEG,其表示的是圖像的質(zhì)量,用0 - 100的整數(shù)表示,默認(rèn)95;對于png ,第三個參數(shù)表示的是壓縮級別。默認(rèn)為3.
注意:
cv2.IMWRITE_JPEG_QUALITY類型為 long ,必須轉(zhuǎn)換成 int
cv2.IMWRITE_PNG_COMPRESSION, 從0到9 壓縮級別越高圖像越小。
eg.
cv2.imwrite('1.png',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
四、圖片操作
1、使用函數(shù)cv2.flip(img,flipcode)翻轉(zhuǎn)圖像,flipcode控制翻轉(zhuǎn)效果。
flipcode = 0:沿x軸翻轉(zhuǎn)
flipcode > 0:沿y軸翻轉(zhuǎn)
flipcode < 0:x,y軸同時翻轉(zhuǎn)
imgflip = cv2.flip(img,1)
2、復(fù)制圖像
imgcopy = img.copy()
3、顏色空間轉(zhuǎn)換
#彩色圖像轉(zhuǎn)為灰度圖像
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)?
#灰度圖像轉(zhuǎn)為彩色圖像
img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
# cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS
示例——————————————————
讀入一副圖像,按’s’鍵保存后退出,其它任意鍵則直接退出不保存
import cv2
img = cv2.imread('1.jpg',cv2.IMREAD_UNCHANGED)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == ord('s'): # wait for 's' key to save and exit
? ? cv2.imwrite('1.png',img)
? ? cv2.destroyAllWindows()
else:
? ? cv2.destroyAllWindows()
示例————————————————————
讀入一副圖像,給圖片加文本
import cv2
# img=cv2.imread('1.jpg',cv2.IMREAD_COLOR)
img=cv2.imread('1.png',cv2.IMREAD_COLOR)? ? # 打開文件
font = cv2.FONT_HERSHEY_DUPLEX? # 設(shè)置字體
# 圖片對象、文本、像素、字體、字體大小、顏色、字體粗細(xì)
imgzi = cv2.putText(img, "zhengwen", (1100, 1164), font, 5.5, (0, 0, 0), 2,)
# cv2.imshow('lena',img)
cv2.imwrite('5.png',img)? ? # 寫磁盤
cv2.destroyAllWindows()? ? # 毀掉所有窗口
cv2.destroyWindow(wname)? ? # 銷毀指定窗口
配合畫圖——————————————————
import numpy as np
import cv2
np.set_printoptions(threshold='nan')
# 創(chuàng)建一個寬512高512的黑色畫布,RGB(0,0,0)即黑色
img=np.zeros((512,512,3),np.uint8)
# 畫直線,圖片對象,起始坐標(biāo)(x軸,y軸),結(jié)束坐標(biāo),顏色,寬度
cv2.line(img,(0,0),(311,511),(255,0,0),10)
# 畫矩形,圖片對象,左上角坐標(biāo),右下角坐標(biāo),顏色,寬度
cv2.rectangle(img,(30,166),(130,266),(0,255,0),3)
# 畫圓形,圖片對象,中心點坐標(biāo),半徑大小,顏色,寬度
cv2.circle(img,(222,222),50,(255.111,111),-1)
# 畫橢圓形,圖片對象,中心點坐標(biāo),長短軸,順時針旋轉(zhuǎn)度數(shù),開始角度(右長軸表0度,上短軸表270度),顏色,寬度
cv2.ellipse(img,(333,333),(50,20),0,0,150,(255,222,222),-1)
# 畫多邊形,指定各個點坐標(biāo),array必須是int32類型
pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
# -1表示該緯度靠后面的緯度自動計算出來,實際上是4
pts = pts.reshape((-1,1,2,))
# print(pts)
# 畫多條線,F(xiàn)alse表不閉合,True表示閉合,閉合即多邊形
cv2.polylines(img,[pts],True,(255,255,0),5)
#寫字,字體選擇
font=cv2.FONT_HERSHEY_SCRIPT_COMPLEX
# 圖片對象,要寫的內(nèi)容,左邊距,字的底部到畫布上端的距離,字體,大小,顏色,粗細(xì)
cv2.putText(img,"OpenCV",(10,400),font,3.5,(255,255,255),2)
a=cv2.imwrite("picture.jpg",img)
cv2.imshow("picture",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
————————打住線
天。。太齊全了。。還是用到啥看啥把。。。