乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      python+opencv圖像處理(十二)

       pythonjava學(xué)習(xí) 2021-04-06

      圖像仿射變換和透視變換

      天晴了......
      1、仿射變換
      圖像仿射變換就是圖像的旋轉(zhuǎn)加上拉升,說直白點(diǎn),就是把矩形變成平行四邊形。
      要把矩形變成平行四邊行,只需要拉伸其四個(gè)角點(diǎn)就行了,事實(shí)上,只需要確定前面三個(gè)點(diǎn),最后一個(gè)點(diǎn)自然就能確定了。
      也就是要改變下圖所示的三個(gè)點(diǎn)的值,對(duì)應(yīng)到新的平行四邊形上相應(yīng)的三個(gè)點(diǎn)即可。

      這三個(gè)原點(diǎn)以及三個(gè)變換后的點(diǎn)呢,就組成了一個(gè)變換矩陣M。
      opencv提供了根據(jù)變換前后三個(gè)點(diǎn)的對(duì)應(yīng)關(guān)系來自動(dòng)求解M。這個(gè)函數(shù)是M=cv2.getAffineTransform(pos1,pos2),其中兩個(gè)位置就是變換前后的對(duì)應(yīng)位置關(guān)系。輸出的就是仿射矩陣M。
      然后在使用函數(shù)cv2.warpAffine()即可完成仿射變換。
      如下圖所示,左圖是原圖,右圖是仿射變換之后的結(jié)果圖。

      其代碼如下:
      from matplotlib import pyplot as plt
      import cv2
      import numpy as np
      img = cv2.imread('E:/image/le.jpg')
      print(img.shape)
      rows,cols = img.shape[:2]
      pts1 = np.float32([[0,0],[rows-1,0],[0,cols-1]])#原來三個(gè)點(diǎn)的位置
      pts2 = np.float32([[20,20],[rows-50,50],[100,cols-100]])#變換后三個(gè)點(diǎn)的位置
      M = cv2.getAffineTransform(pts1,pts2)#合成變換矩陣
      res = cv2.warpAffine(img,M,(cols,rows))#第三個(gè)參數(shù):變換后的圖像大小
      #顯示圖像
      plt.subplot(121)
      plt.imshow(img[:,:,[2,1,0]])
      plt.axis('off')
      plt.title("yuan")
      plt.subplot(122)
      plt.imshow(res[:,:,[2,1,0]])
      plt.axis('off')
      plt.title("dst")
      plt.show()
      2、透視變換
      對(duì)于透視變換,需要確定四個(gè)點(diǎn)的位置,其四個(gè)點(diǎn)對(duì)應(yīng)的位置如下圖。

      可以通過opencv的函數(shù)cv2.getPerspectiveTransform找到變換矩陣. 然后將cv2.warpPerspective應(yīng)用于此3x3變換矩陣,即可完成透視變換
      有一種說法是說,通過透視變換可以將平行四邊形變?yōu)榫匦巍?/span>
      如下圖所示,左圖為原圖,右圖為透視變換后的圖。

      其代碼如下:
      import cv2
      import numpy as np
      import matplotlib.pylab  as plt
      img = cv2.imread('E:/image/ch.jpg')
      print(img.shape)
      rows,cols,ch = img.shape
      pts1 = np.float32([[20,20],[rows-50,50],[0,cols],[rows-50,cols-50]])#原圖四個(gè)角點(diǎn)的位置,我的第三個(gè)點(diǎn)位置沒找對(duì),所以結(jié)果圖只有1,2,4三個(gè)點(diǎn)進(jìn)行了拉伸,而第3個(gè)點(diǎn)沒變。
      pts2 = np.float32([[0,0],[rows,0],[0,cols],[rows,cols]])#結(jié)果圖的四個(gè)點(diǎn)對(duì)應(yīng)的位置,我這里是四個(gè)頂點(diǎn)
      M = cv2.getPerspectiveTransform(pts1,pts2)#合成變換矩陣
      dst = cv2.warpPerspective(img,M,(cols,rows))#進(jìn)行變換
      #以下為顯示圖像
      plt.subplot(121),plt.imshow(img[:,:,[2,1,0]]),plt.title('Input'),plt.axis('off')
      plt.subplot(122),plt.imshow(dst[:,:,[2,1,0]]),plt.title('Output'),plt.axis('off')
      plt.show()

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多