cmd.exe 安裝命令行
》pip install opencv-python
》pip install tensorflow
》pip install keras 必須安裝tensorflow基礎之上
板塊一、
幾何圖形(cv2 圖像處理)
圖片導入; |
tu = cv2.imread('image.jpg') cv2.imwrite('newImage.jpg',image) |
封裝常用函數 代碼塊(.py文件) 包含圖片旋轉代碼 |
![]() import cv2 import matplotlib.pyplot as plt import numpy as np #讀取圖片 def imgRead(src): src = cv2.imread(src) return cv2.cvtColor(src,cv2.COLOR_BGR2RGB) #顯示圖片 def imgShow(img): plt.imshow(img) plt.axis('off') plt.show() def imgWrite(Img): return cv2.imwrite('newImage.jpg',Img) img = imgRead('face.png') imgShow(img) #imgWrite(img) #看圖片的信息 (h,w,t)=img.shape print(img.shape) #得出圖片的中心點 cX,cY=(w//2,h//2) #寫一個 動作 ,旋轉動作 (旋轉中心點,旋轉角度,縮放的倍數) Action = cv2.getRotationMatrix2D((cX,cY),90,1.0) #外容器執行旋轉動作 存儲圖片 img = cv2.warpAffine(img,Action,(w,h)) imgShow(img) 使用引入格式: from 文件名 import * |
設置圖片大小+等比例算法: | imgW = 80 imgH = int(img.shape[0]*imgW/img.shape[1]) img= cv2.resize(img,(imgW,imgH)) show(img) print(img.shape) |
人臉檢測方法初學:
#定義人臉檢測方法 def check(image): detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') #寫入這個 簡單的xml文件 rects = detector.detectMultiScale(image,scaleFactor=1.1,minNeighbors=3,minSize=(10,10),flags=cv2.CASCADE_SCALE_IMAGE) for (x,y,w,h) in rects: cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,0), 2) img = imread('Solvay.jpg') check(img) show(img) |
板塊二、
一、畫圖
導包 | import numpy as np import cv2 import matplotlib.pyplot as plt |
顯示函數 | def show(image): plt.imshow(image) plt.axis('off') plt.show() |
創建一個 300 300 畫布 | image = np.zeros((300,300,3),dtype='uint8') |
畫線 | green = (0,255,0) cv2.line(image, (0,0), (300,300), green) |
正方形 -1 為填充 | cv2.rectangle(wrap,(3,3),(296,296),(120,120,120),5) |
![]() |
(cX,cY) = wrap.shape[1]//2,wrap.shape[0]//2 for i in range(0,140,15): cv2.circle(wrap,(cX,cY),i,green,2) cv2.circle(wrap,(cX,cY),15,(255,0,0),-1) show(wrap) |
content = np.zeros((300,300,3),dtype='uint8') for z in range(15): #隨機的半徑 Rban = np.random.randint(0,150) #隨機的圓心 Rxin = tuple(np.random.randint(0,300,size=(2))) #隨機的顏色 Rcolor = np.random.randint(0,255,size=(3)).tolist() cv2.circle(content,Rxin,Rban,Rcolor,-1) show(content) |
二、翻轉
導包不說了 | cv2 matplotlib.pyplot |
水平翻轉 1 垂直翻轉 0 水平+垂直 -1 |
cv2.finp(image,1) |
三、裁剪
裁剪就是:把圖片的某一塊坐標數值,存起來顯示
avater = image[0:0,200,200] 打印輸出
四、圖像算術
加像素 | add = np.ones(wrap.shape,dtype='uint8')*100 coo = cv2.add(wrap,add) show(coo) |
![]() |
減像素 | shan = np.ones(wrap.shape,dtype='uint8')*205 cww = cv2.subtract(wrap,shan) show(cww) |
![]() |
五、按位計算
與 1&1=1,1&0=0,0&1=0,0&0=0 | and = cv2.bitwise_and(box1,box2) | ![]() |
或1|1=1,1|0=1,0|1=1,0|0=0 | or = cv2.bitwise_or(box1,box2) | ![]() |
異或1^1=0,1^0=1,0^1=1,0^0=0 | xor = cv2.bitwise_xor(box1,box2) | ![]() |
非 |
not= cv2.bitwise_not(wrap) | ![]() |
五、遮擋
#導入一張圖片 img = cv2.imread('cat.jpg') #創建一個 跟圖片相同大小的容器 wrap = np.zeros(img.shap,dtype='uint8') #創建一個盒子 squen = cv2.rectangle(wrap,(25,25),(250,350),白色,-1) #進行按位計算 得出新的圖片 newImg = cv2.bitwise_and(wrap,img) show(newImg) |
![]() |
五、單通道切割
mm = cv2.imread('cat.jpg') show(mm) (R,G,B) = cv2.split(mm) mm.shape meraged = cv2.merge([R,G,B]) show(meraged) cv2.imshow('R',R) cv2.imshow('G',G) cv2.imshow('B',B) cv2.waitKey(0) cv2.destroyAllWindows() |
![]() |
六、圖像金字塔
nn = cv2.imread('image.jpg')
|
![]() |
for u in range(4): nn = cv2.pyrUp(nn) print(nn.shape) show(nn) |
![]() |
七、拉普拉斯金字塔(提取圖像邊界輪廓的)
yuan = cv2.imread('image.jpg') |
![]()
|
板塊三、 形態學(卷積)
一、Erode腐蝕 .erode()
#設置腐蝕 Erision 黑色多一點 白色小時 juxing = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) tuoyuan = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) shizi = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)) |
imagea = cv2.erode(imga,juxing) 去除白色,黑色多 |
![]() |
二、Dilate膨脹 .dilate()
#膨脹 dilate 黑色多一點 白色小時 juxing = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) tuoyuan = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) shizi = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)) |
imagea = cv2.dilate(imga,juxing) 去除白色,黑色多 |
![]() |
三、Opening開運算
#先腐蝕后膨脹 juxing = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) |
opening= cv2.morphologyEx(imga,cv2.MORPH_OPEN,juxing) 專業去除白色小點 |
![]() |
四、Closing閉運算 相反
#先膨脹后腐蝕 juxing = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) |
closing= cv2.morphologyEx(imga,cv2.MORPH_CLOSE,juxing) 專業去除嘿色小點 |
![]() |
五、先開后閉運算
#先膨脹后腐蝕 juxing = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) |
imgb = cv2.imread('image2.jpg') opening= cv2.morphologyEx(imgb,cv2.MORPH_OPEN,juxing) colseing= cv2.morphologyEx(opening,cv2.MORPH_CLOSE,juxing) show(colseing) |
![]() |
六、梯度運算
juxing = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) |
closing= cv2.morphologyEx(imga,cv2.MORPH_GRADIENT,juxing) 膨脹 - 腐蝕 =出現圖像的輪廓線 |
![]() |
七、白帽運算作用:隱藏的白色顯示
# juxing = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) |
closing= cv2.morphologyEx(imga,cv2.MORPH_TopHat,juxing) src - opening |
![]() |