OpenCV(3)圖片變換和圖片特效
阿新 • • 發佈:2018-12-24
(1)圖片縮放
圖片的縮放常用於圖片的預處理,對圖片進行歸一化大小。這裡採用OpenCV庫進行實現。
cv.resize()實現圖片縮放(預設雙線性插值法),固定大小
import cv2 as cv
import numpy as np
img = cv.imread("dog.jpg",1) #讀取一張大小未知的彩色圖
img1 = cv.resize(img,(100,200)) #將原圖變換成寬100,高200的圖片。
print(img1.shape) #(200,100,3)
cv.imshow("img1",img1)
cv.warpAffine()實現縮放
縮放矩陣:[[A1,A2,B1],[A3,A4,B2]]
newX=A1x+A2y+B1
newY=A3
import cv2 as cv
import numpy as np
img = cv.imread("dog.jpg",1)
(height,width,deep) = img.shape
#定義變換矩陣A
A = np.array([[0.5,0,0],[0,0.5,0]],np.float) #0.5代表縮小一倍
#warpAffine方法實現
img1 = cv.warpAffine(img,A,(int(width/2),int(height/2)) )
cv.imshow("img1",img1)
(2) 圖片剪下
import cv2 as cv img = imread("dog.jpg",1) img1 = img[100:300,200:400] #剪下行(高)從100到300,列(寬)從200到400 cv.imshow("img1",img1)
(3)影象旋轉
import cv2 as cv
img = imread("dog.jpg",1)
(height,width,deep) = img.shape
#定義變換矩陣A
A=cv.getRotationMatrix2D((width/2,height/2),45,0.6) #引數:(中心點,旋轉角度,縮放比)
#warpAffine實現旋轉
img1 = cv.warpAffine(img,A,(width,height))
cv.imshow("img1",img)
(4)灰度處理
1、cv.cvtColor()方法
import cv2 as cv img = imread("dog.jpg",1) img1 = cv.cvtColor(img,cv.COLOR_BGR2GRAY) #實現BGR到GRAY的轉換 cv.imshow("img1",img1)
2、直接讀取單通道圖片
import cv2 as cv
img = imread("dog.jpg",0)
cv.imshow("img",img)
(5)圖片灰度反轉
import cv2 as cv
import numpy as np
img = cv.imread("dog.jpg",1)
(height,width,deep) = img.shape
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
img1 = np.zeros((height,width,1),np.uint8)
for i in range(height):
for j in range(width):
temp = gray[i,j]
img1[i,j] = 255-temp #反轉
cv.imshow("img1",img1)
(6)圖片彩色反轉
import cv2 as cv
import numpy as np
img = cv.imread("dog.jpg",1)
(height,width,deep) = img.shape
img1 = np.zeros((height,width,deep),np.uint8)
for i in range(height):
for j in range(width):
(b,g,r) = img[i,j]
img1[i,j] = (255-b,255-g,255-r) #反轉
cv.imshow("img1",img1)
(7)馬賽克效果
馬賽克效果的原理:n*n畫素塊的值取成相同
import cv2 as cv
import numpy as np
img = cv.imread("dog.jpg",1)
(height,width,deep) = img.shape
value = 8 #馬賽克大小
for i in range(100,300,value):
for j in range(100,300,value): #將高100-300寬100-300之間打上馬賽克
for m in range(value):
for n in range(value):
(b,g,r) = img[i,j]
img[m+i,n+j] = (b,g,r)
cv.imshow("img",img)
(8)毛玻璃效果
每個畫素點取領域塊中的隨機一個畫素
import cv2 as cv
import numpy as np
img = cv.imread("dog.jpg",1)
(height,width,deep) = img.shape
img1 = np.zeros((height-4,width-4,3),np.uint8)
for m in range(height-4):
for n in range(width-4):
index = int(np.random.uniform(0,1)*4)
(b,g,r) = img[m+index,n+index]
img1[m,n] = (b,g,r)
cv.imshow("img1",img1)
(9)邊緣檢測
#1、灰度處理 2、高斯濾波(去燥) 3、canny方法計算
img = cv.imread("dog.jpg",1)
imfo = img.shape
height = imfo[0]
width = imfo[1]
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
imgG = cv.GaussianBlur(gray,(3,3),0) #高斯濾波
img1 = cv.Canny(imgG,50,50) #後兩個引數為判決門限
cv.imshow("img1",img1)