您好,登錄后才能下訂單哦!
視頻圖片操作
import cv2 as cv #導入opencv包
cv.imread(path,flags) #加載圖片,其中第一個參數是絕對或者相對路徑,第二個參數為0時加載灰度圖像,為1時加載彩圖像。
cv.imshow(path,flags) #顯示圖片,其中第一個參數是顯示窗口的名稱,第二個參數是打開的圖片
cv.imwrite(name,flags)#保存圖片,第一個參數是途徑,第二個參數是要保存的圖片 返回boolean
cv2.namedWindow 創建一個窗體,只需指定窗體名稱
cv2.namedWindow()初始化默認標簽是cv2.WINDOW_AUTOSIZE。
但是如果把標簽改成cv2.WINDOW_NORMAL就可以自由的調整窗體大小,
當圖像維度太大,這將很有幫助。
cv2.destroyWindow() 銷毀指定窗體
cv2.destroyAllWindows() 銷毀所有窗體
視頻
cap = cv.VideoCapture(0)打開本地攝像頭
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打印像素點個數
cv.ndim打印維度
cv.dtype打印數據類型
cv.waitkey(0) 無限期的等待鍵盤按下
cv.destroyWindow(name)#銷毀所有窗體,參數是需要銷毀窗體的名稱
cv.destroyAllWindows()#銷毀所有窗體
繪圖
圓:cv.circle(畫板,圓心,半徑,顏色,粗細,cv.LINE_AA(抗鋸齒))
線條:cv.line(畫板,起點,終點,顏色,粗細)
橢圓:cv.ellipse(畫板,圓心,(長軸,短軸),逆時針旋轉的角度,橢圓弧沿順時針起始角度,結束角度,顏色,抗鋸齒)
多邊形:`使用函數cv2.polylines在一副圖像中繪制多邊形示例代碼
函數原型:polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) -> img
img:要繪制的那張圖像
pts:多邊形的頂點列表
isClosed:默認為True表示閉合, False表示不閉合
繪制多邊形:
使用函數cv2.polylines在一副圖像中繪制多邊形示例代碼
函數原型:polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) -> img
img:要繪制的那張圖像
pts:多邊形的頂點列表
isClosed:默認為True表示閉合, False表示不閉合
color:線段的顏色,傳一個元組,如紅色(0,0,255),如果是灰度圖請傳入灰度值
thickness:線段的粗細,默認值-1,表示填充
lineType:線段類型:默認8連線,cv2.LINE_AA表示抗鋸齒
more help:help(cv2.polylines)`
繪制矩形:
使用函數cv2.rectangle()在一副圖像中繪制矩形示例代碼
函數原型:rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> img
img:要繪制的那張圖像
pt1:矩形的左上角坐標,如(0, 0)
pt2:矩形右下角坐標, 如(499, 499)
color:線段的顏色,傳一個元組,如紅色(0,0,255), 如果是灰度圖請傳入灰度值
thickness:線段的粗細,默認值-1,表示填充
lineType:線段類型:默認8連線,cv2.LINE_AA表示抗鋸齒
more help:help(cv2.rectangle)
繪制文字:
使用函數cv2.putText()在一副圖像中繪制文字
函數原型:putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) -> img
img:要繪制的那張圖像
text:要繪制的文本
org:繪制的位置坐標
fontFace:字體格式
fontScale:字體大小
color:線段的顏色,傳一個元組,如紅色(0,0,255),如果是灰度圖請傳入灰度值
thickness:線段的粗細,默認值-1,表示填充
lineType:線段類型:默認8連線,cv2.LINE_AA表示抗鋸齒
bottomLeftOrigin 如果為True則圖像位于原點的左下角
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] #起點(100,100)終點(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]]) #原圖點位
matdst = np.float32([[50,50],[100,height-100],[width-100,50]]) #目標點位
matAffine = cv.getAffineTransform(matsrc,matdst) #仿射變換
dst = cv.warpAffine(img,matAffine,(width,height))
圖片旋轉:
matRotate = cv.getRotationMatrix2D((height*0.5,width*0.5),45,0.5)# 參數(中心點,旋轉角度,縮放系數)RotationMatrix2D旋轉矩陣方法
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)
圖片邊緣檢測:
#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()
圖片腐蝕:
腐蝕操作:
原理:
如果卷積核對應的原圖像的所有像素值都是1,那么中心像素點就保持原來的值,
否則變為0。所以前景物體會變小,整幅圖像的白色區域會減少。
erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst
參數解析:鄭州人流醫院 http://www.zzzzyy120.com/
element:腐蝕操作的內核。 如果不指定,默認為一個簡單的 3x3 矩陣。
否則,我們就要明確指定它的形狀,可以使用函數getStructuringElement()。
anchor:默認為Point(-1,-1),內核中心點。省略時為默認值。
iterations:腐蝕次數。省略時為默認值1。
borderType:推斷邊緣類型,具體參見borderInterpolate函數。默認為BORDER_DEFAULT,省略時為默認值。
borderValue:邊緣值,具體可參見createMorphoogyFilter函數。可省略。
作用:
腐蝕對于去除白噪聲很有用,也可以用來斷開兩個連接在一個的物體
代碼示例:
kernel = np.ones((5, 5), np.float32)
erosion = cv.erode(img, kernel, iterations=1)
膨脹操作:
膨脹操作:
原理:
與腐蝕相反,與卷積核對應的原始圖像的像素值中只要有一個是1,
中心像素的值就是1,所以膨脹操作增加白色區域(前景)。
dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst
參數解析:
anchor:默認為Point(-1,-1),內核中心點。省略時為默認值。
iterations:膨脹次數。省略時為默認值1。
borderType:推斷邊緣類型,具體參見borderInterpolate函數。默認為BORDER_DEFAULT,省略時為默認值。
borderValue:邊緣值,具體可參見createMorphoogyFilter函數。可省略。
作用:
一般在去除圖像噪聲時可以先腐蝕然后在膨脹,
這樣噪聲就已經被去除了,不會再回來,但前景會增加。
膨脹也可以用連接兩個分開的物體。
代碼示例:
kernel = np.ones((5, 5), np.float32)
dilate = cv.dilate(img, kernel, iterations=1)
簡單閾值:
全局閾值:
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 = 閾值圖像
參數(灰度圖像,閾值,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)
開操作和閉操作:
開運算:先腐蝕后膨脹, 去除噪聲,去除白色小點、空洞
閉運算:先膨脹后腐蝕, 用來填充前景物體的小黑點
形態學梯度:膨脹減去腐蝕, 可以得到前景物體的輪廓
禮帽:原圖減去開運算
黑帽:閉運算減去原圖
使用函數morphologyEx()進行形態學其他操作
函數原型為:morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst
op參數:
cv.MORPH_OPEN:開運算
cv.MORPH_CLOSE:閉運算
cv.MORPH_GRADIENT:形態學梯度
cv.MORPH_TOPHAT:禮帽
cv.MORPH_BLACKHAT:黑帽
def open_dem0(image):# 開操作
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)#結構元素
binarya = cv.morphologyEx(binary,cv.THRESH_TRUNC ,kernel) #形態學操作
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)) #結構元素
binay = cv.morphologyEx(binay,cv.MORPH_CLOSE,kernel) #形態學操作
cv.imshow('binay',binay)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。