import os
import numpy as np
import cv2
import random
## **回圈記錄**
n=0;k=0;a=0;m=0
path=r"E:\qichacha\img\\beijing\\"#需要增廣的圖片路徑
for i in os.listdir(path):
back = os.path.join(path, i)
img = cv2.imread(back)
#平移
# 構造移動矩陣H
# 在x軸方向移動多少距離,在y軸方向移動多少距離
tx = int(random.randint(0, 150))
ty = int(random.randint(0, 360))
# tx=50;ty=25
H = np.float32([[1, 0, tx], [0, 1, ty]])
height, width = img.shape[0:2]
res = cv2.warpAffine(img, H, (width, height))
cv2.imencode('.jpg', res)[1].tofile("E:\qichacha\img\zengguang\pingyi\{}pingyi.jpg".format(n))
# print("成功--{}".format(i))
#旋轉
height, width = img.shape[0:2]
# 第一個引數是旋轉中心,第二個引數是旋轉角度,第三個引數是縮放比例
dx = int(random.randint(-10, 10))
M1 = cv2.getRotationMatrix2D((width / 2, height / 2), dx, 1)
M2 = cv2.getRotationMatrix2D((width / 2, height / 2), dx, 0.9)
res1 = cv2.warpAffine(img, M1, (width, height))
res2 = cv2.warpAffine(img, M2, (width, height))
cv2.imencode('.jpg', res1)[1].tofile("E:\\qichacha\\img\\zengguang\\xuanzhuan\\{}xuanz1.jpg".format(k))
cv2.imencode('.jpg', res2)[1].tofile("E:\\qichacha\\img\\zengguang\\xuanzhuan\\{}xuanz2.jpg".format(n))
# 仿射變換
height, width = img.shape[0:2]
#放射變換 str->drc變換坐標
matsrc=np.float32([[0,0],[0,height-1],[width-1,0]])
matdrc=np.float32([[10,10],[10,height-50],[width-50,10]]) #(左上角,左下角,右上角)
mataffine=cv2.getAffineTransform(matsrc,matdrc) #形成組合矩陣
dstl=cv2.warpAffine(img,mataffine,(width,height))
cv2.imencode('.jpg', dstl)[1].tofile("E:\qichacha\img\zengguang\\fangshe\{}fangshe.jpg".format(n))
#亮度
img2=np.uint8(np.clip((1.5 * img + 125*(1-1.5)), 0, 255))
img3 = np.uint8(np.clip((0.5 * img + 125 * (1 - 0.5)), 0, 255))
cv2.imencode('.jpg', img2)[1].tofile("E:\qichacha\img\zengguang\liangdu\{}liangdu1.jpg".format(n))
cv2.imencode('.jpg', img3)[1].tofile("E:\qichacha\img\zengguang\liangdu\{}liangdu2.jpg".format(n))
# print("成功--{}".format(m))
# m+=1
#濾波2選一:模糊 一個高斯模糊,一個平均值模糊
dImg2 = cv2.GaussianBlur(img, (7, 7), 0)
dImg1=cv2.blur(img,(5,5)) #封裝函式
cv2.imencode('.jpg', dImg2)[1].tofile("E:\qichacha\img\zengguang\mohu\{}mohu2.jpg".format(n))
cv2.imencode('.jpg', dImg1)[1].tofile("E:\qichacha\img\zengguang\mohu\{}mohu1.jpg".format(n))
# print("成功--{}".format(m))
# m += 1
#裁剪
sp = img.shape # 獲取影像形狀:回傳【行數值,列數值】串列
sz1 = sp[0] # 影像的高度(行 范圍)
sz2 = sp[1] # 影像的寬度(列 范圍)
# sz3 = sp[2] #像素值由【RGB】三原色組成
# 你想對檔案的操作
a = int(100) # y start
b = int(sz1 - 100) # y end
c = int(40) # x start
d = int(sz2 - 100) # x end
caijian = img[a:b, c:d] # 裁剪影像
cv2.imencode('.jpg', caijian)[1].tofile("E:\qichacha\img\zengguang\caijian\{}caijian.jpg".format(n))
#椒鹽噪聲
h, w = img.shape[:2]
jiaoyan=img
nums = 10000
rows = np.random.randint(0, h, nums, dtype=np.int64)
cols = np.random.randint(0, w, nums, dtype=np.int64)
for i in range(nums):
if i % 2 == 1:
jiaoyan[rows[i], cols[i]] = (255, 255, 255) # 奇數則產生白色
else:
jiaoyan[rows[i], cols[i]] = (0, 0, 0) # 偶數則產生黑椒鹽色
cv2.imencode('.jpg', jiaoyan)[1].tofile("E:\qichacha\img\zengguang\jiaoyan\{}jiaoyan.jpg".format(n))
#高斯噪聲
img = np.array(img / 255, dtype=float)
noise = np.random.normal(0, (0.002) ** 0.5, img.shape)
out = img + noise
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out * 255)
cv2.imencode('.jpg', out)[1].tofile("E:\qichacha\img\zengguang\gaozao\{}gaozao.jpg".format(n))
print("成功--{}".format(n))
# m+=1
n += 1;k += 1
**## 定義函式**
import cv2 as cv
import numpy as np
import math
import os
#讀取檔案
def read_images(n):
img1 = cv.imread('./imgs/yinliao/{}.jpg'.format(n))
return img1
#圖片平移
def save_pingyi(tx,ty,n,img1):
affine_arr=np.float32([[1,0,tx],[0,1,ty]]) #函式平移,
pingyi=cv.warpAffine(img1,affine_arr,(width,height)) #引數:【原圖,平移的矩陣,(寬,高)】
cv.namedWindow("pingyi", cv.WINDOW_NORMAL)
# cv.imwrite('./imgs/pingyi/{}.jpg'.format(n),pingyi)
cv.imshow("pingyi",pingyi)
cv.waitKey(0)
#圖片旋轉+平移
def save_xuanzhuan(tx,ty,angle,n,img1):
affine_arr=np.float32([[1,0,tx],[0,1,ty]]) #函式平移,
pingyi=cv.warpAffine(img1,affine_arr,(width,height)) #引數:【原圖,平移的矩陣,(寬,高)】
matrix = np.float32([[math.cos(angle), math.sin(angle), 0], [-math.sin(angle), math.cos(angle), 0]]) # 旋轉的矩陣
xuanzhuan = cv.warpAffine(pingyi, matrix, (width, height)) # 引數:【原圖,旋轉矩陣,(寬,高)】
# cv.imwrite('./imgsanzhuan/{}.jpg'.format(n),xuanzhuan)
cv.imshow("xuanzhuan",xuanzhuan)
cv.waitKey(0)
#翻轉
def save_fanzhuan(n,img1):
fanzhuan = cv.flip(img1, -1)
# cv.imwrite('./imgszhuan/{}.jpg'.format(n),fanzhuan)
cv.imshow("fanzhuan",fanzhuan)
cv.waitKey(0)
#亮度
def save_liangdu(light,n,img1):
liangdu = np.uint8(np.clip((light * img1 + 125 * (1 - light)), 0, 255))
# cv.imwrite('./imgsangdu/{}.jpg'.format(n), liangdu)
cv.imshow("liangdu",liangdu)
cv.waitKey(0)
#裁剪
def save_caijian(n,img1):
sp = img1.shape # 獲取影像形狀:回傳【行數值,列數值】串列
sz1 = sp[0] # 影像的高度(行 范圍)
sz2 = sp[1] # 影像的寬度(列 范圍)
# sz3 = sp[2] #像素值由【RGB】三原色組成
# 你想對檔案的操作
a = int(540) # y start
b = int(sz1 - 100) # y end
c = int(140) # x start
d = int(sz2 - 100) # x end
caijian = img1[a:b, c:d] # 裁剪影像
# cv.imwrite('./imgs/caijian/{}.jpg'.format(n), caijian)
cv.imshow("caijian",caijian)
cv.waitKey(0)
if __name__ == '__main__':
file_dir='./imgs/yinliao' #營業執照待處理圖片
for root, dirs, files in os.walk(file_dir):
#分別獲取跟目錄,當前目錄,子檔案
print(files) #當前路徑下所有非目錄子檔案
print(len(files))
for n in range(1, len(files)):
img1=read_images(n)
height = img1.shape[0] # 高
width = img1.shape[1] # 寬
#平移
tx = 25;ty = 40 # 平移的像素
save_pingyi(tx,ty,n,img1)
# 旋轉+平移
tx = -250;ty = -400 # 平移的像素
angle = -50 # 旋轉度數
save_xuanzhuan(tx,ty,angle,n,img1)
# xy都翻轉
save_fanzhuan(n,img1)
# 亮度調節
light = 0.3 # 亮度為原始的0.3倍
save_liangdu(light,n,img1)
#裁剪
save_caijian(n,img1)
關注一下,謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298455.html
標籤:其他
上一篇:redandgreen
