(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=A3x+A4*y+B2.一般A用于缩放,B用于移位。
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)