圖像預處理

1.圖像預處理

包含:圖像縮放,圖像剪切,圖像位移,圖像鏡像,仿射變化,旋轉變化

2. 原始代碼

#圖像剪裁與預處理
#圖片的縮放
import cv2
import numpy as np
img=cv2.imread('02.jpg',1)
#shape中包含三個信息
# [0]:行數
# [1]:列數
# [2]:通道數
imgInfo=img.shape
height=imgInfo[0]
width=imgInfo[1]
deep=imgInfo[2]
print(deep)

#【1】放大 縮小
a=1.2
dstHeight=int(height*a)
dstWidth=int(width*a)
#放大縮小 涉及到圖像的插值
#常見的插值 最近鄰域差插值 雙線性插值 立方插值
dst=cv2.resize(img,(dstWidth,dstHeight))
cv2.imshow('resizeimage',dst)

#【2】圖像剪切
#[2.1]中間位置剪切
x_center=int((width/2))
y_center=int((height/2))
cutimg_median=img[x_center-200:x_center+200,y_center-200:y_center+200]
cv2.imshow('cut_media',cutimg_median)

#[2.2]任意位置剪切
cutimg_every=img[200:600,200:400]
cv2.imshow('cut_every',cutimg_every)

#【3】 圖片位移
#設定平移矩陣
#矩陣講解
#matshift拆成22的矩陣和21的矩陣
#A=[[1,0],[0,1]],B=[[100],[200]] C=[X,Y]
#A*C=B
#最終效果圖像沿着x軸移動100,沿着y軸移動200;
matshift=np.float32([[1,0,200],[0,1,200]])

shiftimg=cv2.warpAffine(img,matshift,(height,width))
cv2.imshow('shiftimg',shiftimg)

#【4】圖像鏡像
#上下鏡像
#空白圖像的尺寸大小
newImgInfo=(height*2,width,deep)
#創建空白圖片
samedst=np.zeros(newImgInfo,np.uint8)
#開始鏡像
for i in range(0,height):
    for j in range(0,width):
        #samedst上部分像素寫入
        samedst[i,j]=img[i,j]
        #samedst下部分像素寫入
        samedst[height*2-i-1,j]=img[i,j]
#繪製鏡像線
for i in range(0,width):
    samedst[height,i]=(0,0,255)
cv2.imshow('samedst',samedst)

#【5】仿射變化
#設定變化矩陣  根據三組對應點尋找仿射變化的矩陣
matSrc=np.float32([[0,0],[0,height-1],[width-1,0]])
matDst=np.float32([[50,50],[300,height-200],[width-300,100]])
#尋找仿射變化矩陣
matAffine=cv2.getAffineTransform(matSrc,matDst)
affineImg=cv2.warpAffine(img,matAffine,(width,height))
cv2.imshow('affineImg',affineImg)

#【6】旋轉變化
matRotate=cv2.getRotationMatrix2D((height*0.5,width*0.5),45,0.5)
rotateImg=cv2.warpAffine(img,matRotate,(height,width))
cv2.imshow('rotateImg',rotateImg)

cv2.waitKey(0)

3圖像處理效果

旋轉
仿射

平移
剪切
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章