視頻圖片操作
井陘ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!import cv2 as cv #導(dǎo)入opencv包
cv.imread(path,flags) #加載圖片,其中第一個(gè)參數(shù)是絕對(duì)或者相對(duì)路徑,第二個(gè)參數(shù)為0時(shí)加載灰度圖像,為1時(shí)加載彩圖像。
cv.imshow(path,flags) #顯示圖片,其中第一個(gè)參數(shù)是顯示窗口的名稱(chēng),第二個(gè)參數(shù)是打開(kāi)的圖片
cv.imwrite(name,flags)#保存圖片,第一個(gè)參數(shù)是途徑,第二個(gè)參數(shù)是要保存的圖片 返回boolean
cv2.namedWindow 創(chuàng)建一個(gè)窗體,只需指定窗體名稱(chēng)
cv2.namedWindow()初始化默認(rèn)標(biāo)簽是cv2.WINDOW_AUTOSIZE。
但是如果把標(biāo)簽改成cv2.WINDOW_NORMAL就可以自由的調(diào)整窗體大小,
當(dāng)圖像維度太大,這將很有幫助。
cv2.destroyWindow() 銷(xiāo)毀指定窗體
cv2.destroyAllWindows() 銷(xiāo)毀所有窗體
視頻
cap = cv.VideoCapture(0)打開(kāi)本地?cái)z像頭
cap = cv.VideoCapture(videoPath)讀取本地視頻
import cv2 as cv
cap = cv.VideoCapture(0)
while cap.isOpened():
status, frame = cap.read()
k = cv.waitKey(25)
# 圖片灰度化
frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('video', frame)
cv.destroyWindow('video')
方法
cv.shape打印形狀
cv.size打印像素點(diǎn)個(gè)數(shù)
cv.ndim打印維度
cv.dtype打印數(shù)據(jù)類(lèi)型
cv.waitkey(0) 無(wú)限期的等待鍵盤(pán)按下
cv.destroyWindow(name)#銷(xiāo)毀所有窗體,參數(shù)是需要銷(xiāo)毀窗體的名稱(chēng)
cv.destroyAllWindows()#銷(xiāo)毀所有窗體
繪圖
圓:cv.circle(畫(huà)板,圓心,半徑,顏色,粗細(xì),cv.LINE_AA(抗鋸齒))
線條:cv.line(畫(huà)板,起點(diǎn),終點(diǎn),顏色,粗細(xì))
橢圓:cv.ellipse(畫(huà)板,圓心,(長(zhǎng)軸,短軸),逆時(shí)針旋轉(zhuǎn)的角度,橢圓弧沿順時(shí)針起始角度,結(jié)束角度,顏色,抗鋸齒)
多邊形:`使用函數(shù)cv2.polylines在一副圖像中繪制多邊形示例代碼
函數(shù)原型:polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) -> img
img:要繪制的那張圖像
pts:多邊形的頂點(diǎn)列表
isClosed:默認(rèn)為T(mén)rue表示閉合, False表示不閉合
繪制多邊形:
使用函數(shù)cv2.polylines在一副圖像中繪制多邊形示例代碼
函數(shù)原型:polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) -> img
img:要繪制的那張圖像
pts:多邊形的頂點(diǎn)列表
isClosed:默認(rèn)為T(mén)rue表示閉合, False表示不閉合
color:線段的顏色,傳一個(gè)元組,如紅色(0,0,255),如果是灰度圖請(qǐng)傳入灰度值
thickness:線段的粗細(xì),默認(rèn)值-1,表示填充
lineType:線段類(lèi)型:默認(rèn)8連線,cv2.LINE_AA表示抗鋸齒
more help:help(cv2.polylines)`
繪制矩形:
使用函數(shù)cv2.rectangle()在一副圖像中繪制矩形示例代碼
函數(shù)原型:rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> img
img:要繪制的那張圖像
pt1:矩形的左上角坐標(biāo),如(0, 0)
pt2:矩形右下角坐標(biāo), 如(499, 499)
color:線段的顏色,傳一個(gè)元組,如紅色(0,0,255), 如果是灰度圖請(qǐng)傳入灰度值
thickness:線段的粗細(xì),默認(rèn)值-1,表示填充
lineType:線段類(lèi)型:默認(rèn)8連線,cv2.LINE_AA表示抗鋸齒
more help:help(cv2.rectangle)
繪制文字:
使用函數(shù)cv2.putText()在一副圖像中繪制文字
函數(shù)原型:putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) -> img
img:要繪制的那張圖像
text:要繪制的文本
org:繪制的位置坐標(biāo)
fontFace:字體格式
fontScale:字體大小
color:線段的顏色,傳一個(gè)元組,如紅色(0,0,255),如果是灰度圖請(qǐng)傳入灰度值
thickness:線段的粗細(xì),默認(rèn)值-1,表示填充
lineType:線段類(lèi)型:默認(rèn)8連線,cv2.LINE_AA表示抗鋸齒
bottomLeftOrigin 如果為T(mén)rue則圖像位于原點(diǎn)的左下角
more help:help(cv2.putText)
圖片操作
仿射變換:
matScale = np.float32([[0.5,0,0],[0,0.5,0]])
dst = cv.warpAffine(img,matScale,(width,height))
RGB通道拆分:b, g, r = cv.split(img)
RGB通道合并:img1 = cv.merge((B, g, r))
圖片縮放:cv.resize(原圖,(heigth,width))
圖片剪切:
img = cv.imread('cat.jpg',1)
dst = img[100:200,100:300] #起點(diǎn)(100,100)終點(diǎn)(200,200)
cv.imshow('dst',dst)
cv.waitKey(0)
圖片移位:
matShift = np.float32([[1,0,100],[0,1,200]])
dst = cv.warpAffine(img,matShift,(height,width))
cv.imshow('dst',dst)
圖片仿射變換:
matsrc = np.float32([[0,0],[0,height],[width,0]]) #原圖點(diǎn)位
matdst = np.float32([[50,50],[100,height-100],[width-100,50]]) #目標(biāo)點(diǎn)位
matAffine = cv.getAffineTransform(matsrc,matdst) #仿射變換
dst = cv.warpAffine(img,matAffine,(width,height))
圖片旋轉(zhuǎn):
matRotate = cv.getRotationMatrix2D((height*0.5,width*0.5),45,0.5)# 參數(shù)(中心點(diǎn),旋轉(zhuǎn)角度,縮放系數(shù))RotationMatrix2D旋轉(zhuǎn)矩陣方法
dst = cv.warpAffine(img,matRotate,(width,height))#放射變化
圖片特效
灰度處理:
#方法一:
img0 = cv.imread('cat.jpg',0) #灰度圖片
img1 = cv.imread('cat.jpg',1)#彩圖
#方法二:
img = cv.imread('cat.jpg',1)
dst = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#方法三:
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):
for j in range(0,width):
(b,g,r) = img[i,j]
gray = (int(b)+int(g)+int(r))/3
dst[i,j] = gray
print(np.uint(gray))
#方法四
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):
for j in range(0,width):
(b,g,r) = img[i,j]
b = int(b)
g = int(g)
r = int(r)
gray = r*0.229+g*0.587+r*0.114
dst[i,j] = np.uint(gray)
圖片邊緣檢測(cè):
#1.灰度圖像處理
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#2.高斯濾波
imgG = cv.GaussianBlur(gray,(3,3),0)
#3.卷積
dst = cv.Canny(img,100,100)
繪圖
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,2,3,4,5,6,7,8])
y = np.array([3,5,7,6,2,6,10,15])
plt.plot(x,y,'r',lw = 10) #折線圖
plt.bar(x,y,0.5,alpha = 1,color = 'b') #原主圖
plt.show()
圖片腐蝕:
腐蝕操作:
原理:
如果卷積核對(duì)應(yīng)的原圖像的所有像素值都是1,那么中心像素點(diǎn)就保持原來(lái)的值,
否則變?yōu)?。所以前景物體會(huì)變小,整幅圖像的白色區(qū)域會(huì)減少。
erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst
參數(shù)解析:鄭州人流醫(yī)院 http://www.zzzzyy120.com/
element:腐蝕操作的內(nèi)核。 如果不指定,默認(rèn)為一個(gè)簡(jiǎn)單的 3x3 矩陣。
否則,我們就要明確指定它的形狀,可以使用函數(shù)getStructuringElement()。
anchor:默認(rèn)為Point(-1,-1),內(nèi)核中心點(diǎn)。省略時(shí)為默認(rèn)值。
iterations:腐蝕次數(shù)。省略時(shí)為默認(rèn)值1。
borderType:推斷邊緣類(lèi)型,具體參見(jiàn)borderInterpolate函數(shù)。默認(rèn)為BORDER_DEFAULT,省略時(shí)為默認(rèn)值。
borderValue:邊緣值,具體可參見(jiàn)createMorphoogyFilter函數(shù)。可省略。
作用:
腐蝕對(duì)于去除白噪聲很有用,也可以用來(lái)斷開(kāi)兩個(gè)連接在一個(gè)的物體
代碼示例:
kernel = np.ones((5, 5), np.float32)
erosion = cv.erode(img, kernel, iterations=1)
膨脹操作:
膨脹操作:
原理:
與腐蝕相反,與卷積核對(duì)應(yīng)的原始圖像的像素值中只要有一個(gè)是1,
中心像素的值就是1,所以膨脹操作增加白色區(qū)域(前景)。
dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst
參數(shù)解析:
anchor:默認(rèn)為Point(-1,-1),內(nèi)核中心點(diǎn)。省略時(shí)為默認(rèn)值。
iterations:膨脹次數(shù)。省略時(shí)為默認(rèn)值1。
borderType:推斷邊緣類(lèi)型,具體參見(jiàn)borderInterpolate函數(shù)。默認(rèn)為BORDER_DEFAULT,省略時(shí)為默認(rèn)值。
borderValue:邊緣值,具體可參見(jiàn)createMorphoogyFilter函數(shù)??墒÷?。
作用:
一般在去除圖像噪聲時(shí)可以先腐蝕然后在膨脹,
這樣噪聲就已經(jīng)被去除了,不會(huì)再回來(lái),但前景會(huì)增加。
膨脹也可以用連接兩個(gè)分開(kāi)的物體。
代碼示例:
kernel = np.ones((5, 5), np.float32)
dilate = cv.dilate(img, kernel, iterations=1)
簡(jiǎn)單閾值:
全局閾值:
def threshold_dem0(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
print("閾值",ret)
cv.imshow('binary',binary)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
ret = 閾值,binary = 閾值圖像
參數(shù)(灰度圖像,閾值,255,閾值算法)
局部閾值:
def local_threshold(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
binary = cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,25,10)
cv.imshow('biary',binary)
binary = cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,25,10)
自定義閾值:
def load_threshold(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
h,w = gray.shape[:2]
men = np.reshape(gray,[1,w*h])
men1 = men.sum()/(w*h) #所有像素的均值
are,binary = cv.threshold(gray,men1,255,cv.THRESH_BINARY)
cv.imshow('biary',binary)
開(kāi)操作和閉操作:
開(kāi)運(yùn)算:先腐蝕后膨脹, 去除噪聲,去除白色小點(diǎn)、空洞
閉運(yùn)算:先膨脹后腐蝕, 用來(lái)填充前景物體的小黑點(diǎn)
形態(tài)學(xué)梯度:膨脹減去腐蝕, 可以得到前景物體的輪廓
禮帽:原圖減去開(kāi)運(yùn)算
黑帽:閉運(yùn)算減去原圖
使用函數(shù)morphologyEx()進(jìn)行形態(tài)學(xué)其他操作
函數(shù)原型為:morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst
op參數(shù):
cv.MORPH_OPEN:開(kāi)運(yùn)算
cv.MORPH_CLOSE:閉運(yùn)算
cv.MORPH_GRADIENT:形態(tài)學(xué)梯度
cv.MORPH_TOPHAT:禮帽
cv.MORPH_BLACKHAT:黑帽
def open_dem0(image):# 開(kāi)操作
print(image.shape)
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV | cv.THRESH_OTSU)#閾值化
cv.imshow('binary',binary)
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(3,3)#結(jié)構(gòu)元素
binarya = cv.morphologyEx(binary,cv.THRESH_TRUNC ,kernel) #形態(tài)學(xué)操作
cv.imshow('binary2',binarya)
def close_dem0(image):#閉操作
print(image.shape)
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binay = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU) #閾值化
cv.imshow('binay',binay)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15)) #結(jié)構(gòu)元素
binay = cv.morphologyEx(binay,cv.MORPH_CLOSE,kernel) #形態(tài)學(xué)操作
cv.imshow('binay',binay)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞名稱(chēng):Opencv基礎(chǔ)-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.rwnh.cn/article4/csoooe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、企業(yè)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站排名、做網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容