欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎么使用PythonOpenCV為CNN增加圖像樣本-創(chuàng)新互聯(lián)

小編給大家分享一下怎么使用Python OpenCV為CNN增加圖像樣本,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)是一家集網站建設,徐匯企業(yè)網站建設,徐匯品牌網站建設,網站定制,徐匯網站建設報價,網絡營銷,網絡優(yōu)化,徐匯網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

python有哪些常用庫

python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

我們在做深度學習的過程中,經常面臨圖片樣本不足、不平衡的情況,在本文中,作者結合實際工作經驗,通過圖像的移動、縮放、旋轉、增加噪聲等圖像變換技術,能快速、簡便的增加樣本數量。

使用OpenCV跨平臺計算機視覺庫,在Python3.6上實現,。

1. 圖片拼接及平移

1.1. 圖像移動

圖像平移是將圖像的所有像素坐標進行水平或垂直方向移動,也就是所有像素按照給定的偏移量在水平方向上沿x軸、垂直方向上沿y軸移動。

#移動圖像,讓出邊緣,大小不變(此方法比較笨了)
def move_img(img_file1,out_file,tunnel,border_position,border_width):
  print('file1=' + img_file1 )
  img1 = cv2.imread(img_file1, cv2.IMREAD_GRAYSCALE)
  hight,width = img1.shape
  # 初始化空圖
  final_matrix = np.zeros((hight,width), np.uint8) #,tunnel), np.uint8) #高*款(y,x)20*20*1
  # change 
  x1=0
  y1=hight
  x2=width
  y2=0  #圖片高度,坐標起點從上到下
  if border_position =='top':
    final_matrix[y2:y1 - border_width, x1:x2] = img1[y2 + border_width:y1, x1:x2]
  #左側增加邊或空白
  if border_position == 'left':
    final_matrix[y2 :y1, x1:x2 - border_width] = img1[y2:y1, x1 + border_width:x2]

  if border_position == 'right':
    final_matrix[y2 :y1, x1 + border_width:x2] = img1[y2:y1, x1:x2 - border_width]
  #底部增加邊或空白
  if border_position =='bottom':
    final_matrix[y2 + border_width :y1, x1:x2] = img1[y2:y1 - border_width , x1:x2]
  if border_position =='copy':
    final_matrix[y2 :y1, x1:x2] = img1[y2:y1 , x1:x2]

  cv2.imwrite(out_file, final_matrix) 

  return final_matrix

怎么使用Python OpenCV為CNN增加圖像樣本

樣例代碼,詳見第5章節(jié)。

1.2. 圖片拼接

圖片拼接是分別讀取圖片,新建一個目標像素大小的0矩陣,最后將讀取的圖片替換新建矩陣中目標位置上的元素即可。主要可用于圖像切換場景,例如常見的齒輪式數字儀表盤,數字進位時出現的半個數字。

#圖像四周拼接邊緣,大小不變
def splicing_img(img_file1,img_file2,out_file,tunnel,border_position,border_width):
  print('file1=' + img_file1 + ', file2=' + img_file2)
  img1 = cv2.imread(img_file1, cv2.IMREAD_GRAYSCALE)
  img2 = cv2.imread(img_file2, cv2.IMREAD_GRAYSCALE)
  #第二個參數為如何讀取圖片,包括cv2.IMREAD_COLOR:讀入一副彩色圖片;cv2.IMREAD_GRAYSCALE:以灰度模式讀入圖片;cv2.IMREAD_UNCHANGED:讀入一幅圖片,并包括其alpha通道。
  hight,width = img1.shape
  final_matrix = np.zeros((hight,width), np.uint8) #,tunnel), np.uint8) #高*款(y,x)20*20*1
  # change 
  x1=0
  y1=hight
  x2=width
  y2=0  #圖片高度,坐標起點從上到下
  if border_position =='top':
    final_matrix[y2 + border_width:y1, x1:x2] = img1[y2:y1 - border_width, x1:x2]
    final_matrix[y2:border_width, x1:x2] = img2[y2:border_width, x1:x2]
  #左側增加邊或空白
  if border_position == 'left':
    final_matrix[y2 :y1, x1+ border_width:x2] = img1[y2:y1, x1:x2 - border_width]
    final_matrix[y2:y1, x1:border_width] = img2[y2:y1, x1:border_width]    

  if border_position == 'right':
    final_matrix[y2 :y1, x1:x2 - border_width] = img1[y2:y1, x1 + border_width:x2]
    final_matrix[y2:y1, x2-border_width:x2] = img2[y2:y1, x1:border_width]    
  #底部增加邊或空白
  if border_position =='bottom':
    final_matrix[y2 :y1 - border_width, x1:x2] = img1[y2+ border_width:y1 , x1:x2]
    final_matrix[y1 - border_width:y1, x1:x2] = img2[y2:border_width, x1:x2]
  if border_position =='copy':
    final_matrix[y2 :y1, x1:x2] = img1[y2:y1 , x1:x2]

  cv2.imwrite(out_file, final_matrix) 

  return final_matrix

怎么使用Python OpenCV為CNN增加圖像樣本

2. 圖片仿射變換之平移、旋轉

2.1. 關于仿射變換

仿射變換,又稱仿射映射,是指在幾何中,一個向量空間進行一次線性變換并接上一個平移,變換為另一個向量空間。

仿射變換是在幾何上定義為兩個向量空間之間的一個仿射變換或者仿射映射(來自拉丁語,affine,“和…相關”)由一個非奇異的線性變換(運用一次函數進行的變換)接上一個平移變換組成。仿射變換可以通過一系列的原子變換的復合來實現,包括:平移(Translation)、縮放(Scale)、翻轉(Flip)、旋轉(Rotation)和剪切(Shear)。

2.2. Python上的OpenCV實現 2.2.1. 旋轉

旋轉是通過仿射變換實現的,首先,旋轉需要先定義一個旋轉矩陣,使用cv2.getRotationMatrix2D()函數。

參數1:需要旋轉的中心點;

參數2:需要旋轉的角度;

參數3:需要縮放的比例。

#旋轉圖像,輸入文件名、輸出文件名,旋轉角度
def rotationImg(img_file1,out_file,ra):
  # 獲取圖片尺寸并計算圖片中心點
  img = cv2.imread(img_file1, cv2.IMREAD_GRAYSCALE)
  (h, w) = img.shape[:2]
  center = (w/2, h/2)

  M = cv2.getRotationMatrix2D(center, ra, 1.0)
  rotated = cv2.warpAffine(img, M, (w, h))
  #cv2.imshow("rotated", rotated)
  #cv2.waitKey(0)
  cv2.imwrite(out_file, rotated)
  
  return rotated

怎么使用Python OpenCV為CNN增加圖像樣本

2.2.2. 平移

使用仿射變換平移圖像,首先使用已經給出的平移矩陣M:[[1,0,x],[0,1,y]],x、y分別是x與y在橫向、縱向移動像數。

怎么使用Python OpenCV為CNN增加圖像樣本

#仿射變換技術,平移圖片,x_off:x方向平移像數;y_off:y方向平移像數,正數是右、下方移動,負數為左、上方移動
def translation_img(img_file1,out_file,x_off,y_off):
  img = cv2.imread(img_file1, cv2.IMREAD_GRAYSCALE)
  rows,cols = img.shape
  # 定義平移矩陣,需要是numpy的float32類型
  # x軸平移x_off,y軸平移y_off, 2*3矩陣
  M = np.float32([[1,0,x_off],[0,1,y_off]])
  dst = cv2.warpAffine(img,M,(cols,rows))
  
  cv2.imwrite(out_file, dst)

怎么使用Python OpenCV為CNN增加圖像樣本

3. 圖片縮放及剪裁

3.1. 圖片縮放

圖片縮放使用CV2的cv2.resize()函數,函數語法如下:cv2.resize(img, (dstWeight,dstHeight)),第一個參數是源圖像數據,第二個參數(目標寬度,目標高度)。

在實際應用中,輸入圖像大小是固定不變,這樣在縮放圖片后,如果是放大,則需要剪裁,如果縮寫,則出現空余區(qū)域。(注:本案例中參數deviation,用于取放大圖像的起點位置,參照位置為左上角)

#縮放,輸入文件名,輸出文件名,放大高與寬,偏離度
def resizeImg(img_file1,out_file,dstWeight,dstHeight,deviation):
  img1 = cv2.imread(img_file1, cv2.IMREAD_GRAYSCALE)
  imgshape = img1.shape

  h = imgshape[0]
  w = imgshape[1]
  final_matrix = np.zeros((h,w), np.uint8)
  x1=0
  y1=h
  x2=w
  y2=0  #圖片高度,坐標起點從上到下  
  dst = cv2.resize(img1, (dstWeight,dstHeight))
  if h<dstHeight:
    final_matrix[y2 :y1, x1:x2] = dst[y2+deviation:y1+deviation , x1+deviation:x2+deviation]
  else:
    if deviation == 0:
      final_matrix[y2 :dstHeight, x1:dstWeight] = dst[y2 :dstHeight,x1 :dstWeight]
    else:
      final_matrix[y2 + deviation:dstHeight + deviation, x1 + deviation:dstWeight + deviation] = dst[y2 :dstHeight,x1 :dstWeight]
  cv2.imwrite(out_file, final_matrix)
  
  return final_matrix

3.2. 圖片剪裁

在做圖像處理時,一般是圖像大小保持一致,因此,圖片剪裁時,圖片大小不變,去掉不需要的部分。

#剪切圖片
def cut_img(img_file1,out_file,top_off,left_off,right_off,bottom_off):
  img1 = cv2.imread(img_file1, cv2.IMREAD_GRAYSCALE)
  hight,width = img1.shape  
  x1=0
  y1=hight
  x2=width
  y2=0  #圖片高度,坐標起點從上到下hight,width = img1.shape
  
  #灰度圖像,不使用通道tunnel
  final_matrix = np.zeros((hight,width), np.uint8) #,tunnel), np.uint8) #高*款(y,x)20*20*1
  final_matrix[y2 + top_off:y1 - bottom_off, x1 + left_off:x2 - right_off] = img1[y2 + top_off:y1 - bottom_off, x1 + left_off:x2 - right_off]

  cv2.imwrite(out_file, final_matrix) 

  return final_matrix

怎么使用Python OpenCV為CNN增加圖像樣本

4. 圖片增加高斯噪聲/椒鹽噪聲

在matlab中,存在執(zhí)行直接得函數來添加高斯噪聲和椒鹽噪聲。Python-OpenCV中雖然不存在直接得函數,但是很容易使用相關的函數來實現。

4.1. 添加鹽椒噪聲

# 添加椒鹽噪聲,prob:噪聲比例 
def sp_noiseImg(img_file1,prob):
  image = cv2.imread(img_file1, cv2.IMREAD_GRAYSCALE)
  output = np.zeros(image.shape,np.uint8)
  thres = 1 - prob 
  for i in range(image.shape[0]):
    for j in range(image.shape[1]):
      rdn = random.random()
      if rdn < prob:
        output[i][j] = 0
      elif rdn > thres:
        output[i][j] = 255
      else:
        output[i][j] = image[i][j]
  return output

怎么使用Python OpenCV為CNN增加圖像樣本 

噪聲比依次是:0.1、0.05、0.01。

4.2. 添加高斯噪聲

# 添加高斯噪聲
# mean : 均值
# var : 方差
def gasuss_noiseImg(img_file1, out_file, mean=0, var=0.001):
  image = cv2.imread(img_file1, cv2.IMREAD_GRAYSCALE)
  image = np.array(image/255, dtype=float)
  noise = np.random.normal(mean, var ** 0.5, image.shape)
  out = image + 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.imwrite(out_file, out)
  
  return out

5. 代碼測試

'''
Created on 2019年5月20日

@author: xiaoyw
'''
#coding: utf-8
import numpy as np
import cv2
import os
import random

#函數部分略過,見上文
if __name__ == '__main__':
  file1 = 'dog.jpg'
  
  move_img(file1,'timg11.jpg',1,'top',35)
  move_img(file1,'timg12.jpg',1,'left',35)
  move_img(file1,'timg13.jpg',1,'right',35)
  move_img(file1,'timg14.jpg',1,'bottom',35)
  cut_img(file1,'dog_cut.jpg',20,10,20,30)
  rotationImg(file1,'dog_ra1.jpg',30)
  rotationImg(file1,'dog_ra1.jpg',60)
  rotationImg(file1,'dog_ra2.jpg',-90)
  sp_noiseImg(file1,'dog_sp_01.jpg',0.01) 
  sp_noiseImg(file1,'dog_sp_05.jpg',0.05)
  sp_noiseImg(file1,'dog_sp_10.jpg',0.1) 
  resizeImg(file1,'dog_big.jpg',250,280,0)
  resizeImg(file1,'dog_small.jpg',100,200,0)
  splicing_img(file1,file1,'dog2.jpg',1,'right',50)
  translation_img(file1,'timg15.jpg',10,10)
  translation_img(file1,'timg16.jpg',-20,-30)

  pass

以上是“怎么使用Python OpenCV為CNN增加圖像樣本”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)成都網站設計公司行業(yè)資訊頻道!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文名稱:怎么使用PythonOpenCV為CNN增加圖像樣本-創(chuàng)新互聯(lián)
URL網址:http://chinadenli.net/article36/cehdsg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、云服務器、電子商務定制開發(fā)、外貿網站建設網站導航

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管
欧美加勒比一区二区三区| 久久精视频免费视频观看| 99福利一区二区视频| 国产亚洲中文日韩欧美综合网| 亚洲国产香蕉视频在线观看| 91麻豆精品欧美一区| av中文字幕一区二区三区在线| 国产精品久久香蕉国产线| 日本高清不卡在线一区| 日本精品视频一二三区| 国内精品偷拍视频久久| 99久久免费中文字幕| 亚洲香艳网久久五月婷婷| 日韩亚洲激情在线观看| 美女被啪的视频在线观看| 视频一区二区 国产精品| 国产午夜精品亚洲精品国产| 日本加勒比中文在线观看| 亚洲视频一区二区久久久| 好吊日成人免费视频公开| 免费午夜福利不卡片在线 视频| 国产传媒高清视频在线| 色涩一区二区三区四区| 亚洲精品一区二区三区日韩| 日韩国产中文在线视频| 色婷婷视频国产一区视频| 日韩夫妻午夜性生活视频| 超薄丝袜足一区二区三区| 久久免费精品拍拍一区二区| 女厕偷窥一区二区三区在线| 成年男女午夜久久久精品| 黄色三级日本在线观看| 东京热加勒比一区二区| 在线观看日韩欧美综合黄片| 日本少妇三级三级三级| 隔壁的日本人妻中文字幕版| 美国女大兵激情豪放视频播放| 在线视频三区日本精品| 国产日韩中文视频一区| 精品久久少妇激情视频| 在线九月婷婷丁香伊人|