婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > OpenCV+Python幾何變換的實現示例

OpenCV+Python幾何變換的實現示例

熱門標簽:北京外呼電銷機器人招商 南京crm外呼系統排名 汕頭電商外呼系統供應商 電銷機器人 金倫通信 賓館能在百度地圖標注嗎 crm電銷機器人 云南地圖標注 鄭州智能外呼系統中心 400電話 申請 條件

幾何變換

圖像的幾何變換是指將一幅圖像映射到另一幅圖像內。有縮放、翻轉、仿射變換、透視、重映射等操作。

1 縮放

使用cv2.resize()函數實現對圖像的縮放,但要注意cv2.resize()函數內的dsize參數與原圖像的行列屬性是相反的,也就是:目標圖像的行數是原始圖像的列數,目標圖像的列數是原始圖像的行數。

下面舉例說明cv2.resize()函數的用法:

import cv2
img=cv2.imread('E:/python_opencv/tupian.jpg')
rows,cols=img.shape[0:2]  #行數和列數等于img的長度和寬度
size=(int(cols*0.9),int(rows*0.5))  #比例:列變為原來0.9倍,行變為0.5倍
rst=cv2.resize(img,size)  #將img按size比例縮放
print('img.shape=',img.shape)
print('rst.shape=',rst.shape)

運行程序的結果如下:

img.shape=(600,60,3)
rst.shape=(300,54,3)

可以看出,行數變為原來的0.5倍,列數變為原來的0.9倍。代碼中size的行列位置發生了交換。

2 翻轉

使用cv2.flip()函數對圖像翻轉,能夠實現水平方向翻轉、垂直方向翻轉、兩個方向同時翻轉。

下面舉例說明cv2.flip()函數的用法:

import cv2
img=cv2.imread('E:/python_opencv/tupian.jpg')
x=cv2.flip(img,0)   #圖x對原圖像繞x軸翻轉
y=cv2.flip(img,1)   #圖y對原圖像繞y軸翻轉
xy=cv2.flip(img,-1)  #圖xy對原圖像繞x軸y軸同時翻轉
cv2.imshow('img',img)
cv2.imshow('x',x)
cv2.imshow('y',y)
cv2.imshow('xy',xy)
cv2.waitKey()
cv2.destroyAllWindows()

程序運行結果如下四幅圖,第一幅是原圖,第二幅是繞x軸翻轉,第三幅是繞y軸翻轉,第四幅是繞x軸y軸同時翻轉。

3 仿射

仿射變換是指圖像實現平移、旋轉等操作。

先設置一個變換矩陣M,然后使用cv2.warpAffine()函數對原圖像和變換矩陣M進行仿射操作。

(一)平移

要實現圖像的平移,我們先自定義一個轉換矩陣,再進行仿射平移變換。例程如下:

import cv2
import numpy as np
img=cv2.imread('E:\python_opencv/tupian.jpg')
height,width=img.shape[:2]     #讀取原圖像的長和寬
x=100                      #自定義轉換矩陣M的x軸移動值
y=200                      #自定義轉換矩陣M的y軸移動值
M=np.float32([[1,0,x],[0,1,y]])    #構造轉換矩陣M
move=cv2.warpAffine(img,M,(width,height))  #平移映射
cv2.imshow('orginal',img)
cv2.imshow('move',move)
cv2.waitKey()
cv2.destroyAllWindows()

程序運行結果如下圖所示,左為原圖,右為平移后的圖。

(二)旋轉

使用函數cv2.getRotationMatrix2D()獲得轉移矩陣M,然后使用函數cv2.warpAffine()進行仿射旋轉變換。例程如下:

import cv2
img=cv2.imread('E:\python_opencv/tupian.jpg')
height,width=img.shape[:2]  #讀取原圖像的長和寬
M=cv2.getRotationMatrix2D((width/2,height/2),45,0.6)  #以中心為原點,逆時針旋轉45°,且縮小為原圖的0.6倍,獲得轉移矩陣M
rotate=cv2.warpAffine(img,M,(width,height))  #旋轉映射
cv2.imshow('original',img)
cv2.imshow('rotation',rotate)
cv2.waitKey()
cv2.destroyAllWindows()

程序運行結果如下圖所示,左為原圖,右為旋轉后的圖。

4 透視

透視變換是指將矩陣圖形投影到另一個視平面,可以映射為任意四邊形,所以透視變換也被稱為投影映射(ProjectionMapping),并不是字面意義上的“透視”。透視與上節的仿射不同,仿射可以將矩陣映射為任意平行四邊形。

使用cv2.warpPerspective()函數實現透視變換。例程如下:

#完成圖像透視
import cv2
import numpy as np
img=cv2.imread('E:/python_opencv/tupian.jpg')
rows,cols=img.shape[:2]   #讀取原圖像的長和寬
print(rows,cols)
#生成旋轉矩陣M
pts1=np.float32([[150,50],[400,50],[60,450],[310,450]])
pts2=np.float32([[50,50],[rows-50,50],[50,cols-50],[rows-50,cols-50]])
M=cv2.getPerspectiveTransform(pts1,pts2)
#使用函數cv2.warpPerspective()進行透視變換
dst=cv2.warpPerspective(img,M,(cols,rows))
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey()
cv2.destroyAllWindows()

程序運行結果如下圖所示,左為原圖,右為透視變換的圖。

我們可以看到,原圖片經過透視映射后,變成另一個視角下的任意四邊形了。

5 重映射

重映射是修改了像素點的位置,從而生成一幅新的圖像,包括:復制、繞x軸y軸翻轉,x軸y軸互換,圖像縮放等。

均使用cv2.remap()重映射函數進行操作。

需要注意cv2.remap()中的兩個參數mapx、mapy。mapx表示對應位置上x軸坐標值,mapy表示對應位置上y軸坐標值。

(一)復制

使用cv2.remap()函數完成圖像復制,需先定義mapx,mapy的值,然后循環映射每個像素點到對應的位置上。

代碼如下:

import cv2
import numpy as np
img=cv2.imread('E:/python_opencv/tupian.jpg')
rows,cols=img.shape[:2]         #讀取行列數
mapx=np.zeros(img.shape[:2],np.float32) #mapx參數設定為對應位置上的x軸坐標值
mapy=np.zeros(img.shape[:2],np.float32) #mapy參數設定為對應位置上的y軸坐標值
for i in range(rows):          #對每個元素復制映射
  for j in range(cols):
    mapx.itemset((i,j),j)
    mapy.itemset((i,j),i)
rst=cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)
cv2.imshow('original',img)
cv2.imshow('result',rst)
cv2.waitKey()
cv2.destroyAllWindows()

執行后結果如下所示,可以看到,實現了圖像的復制重映射。

(二)繞x軸翻轉

重映射法對圖像繞x軸翻轉,表明mapx的值保持不變,mapy的值調整為總行數-1-當前行號,其余部分代碼不變,所以循環體內代碼變為:

 for i in range(rows):
   for j in range(cols):
     mapx.itemset((i,j),j)      #mapx的值保持不變
     mapy.itemset((i,j),rows-1-i)  #mapy的值調整為總行數-1-當前行號

(三)繞y軸翻轉

重映射法對圖像繞y軸翻轉,表明mapx的值調整為總行數-1-當前列號,mapy的值保持不變,所以循環體內代碼變為:

for i in range(rows):
  for j in range(cols): 
     mapx.itemset((i,j),cols-1-j)  #mapx的值調整為總列數-1-當前列號
     mapy.itemset((i,j),i)      #mapy的值保持不變

(四)繞x軸y軸翻轉

重映射也能實現圖像繞x軸和y軸的同時翻轉,只需將前兩個部分合并,使mapx的值調整為總行數-1-當前列號,mapy的值調整為總行數-1-當前行號。例程如下:

import cv2
import numpy as np
img=cv2.imread('E:\python_opencv/tupian.jpg')
rows,cols=img.shape[:2]
mapx=np.zeros(img.shape[:2],np.float32)
mapy=np.zeros(img.shape[:2],np.float32)
for i in range(rows):
  for j in range(cols):
    mapx.itemset((i,j),cols-1-j)  #mapx的值調整為總列數-1-當前列號
    mapy.itemset((i,j),rows-1-i)  #mapy的值調整為總行數-1-當前行號
rst=cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)
cv2.imshow('original',img)
cv2.imshow('result',rst)
cv2.waitKey()
cv2.destroyAllWindows()

執行后結果如下所示,可以看到,實現了圖像的繞x軸和y軸翻轉重映射過程。

(五)x軸、y軸互換

重映射中,x軸、y軸互換表明,mapx的值變為所在行的行號,mapy的值變為所在列的列號。

但當行數和列數不一致時,行或列無法完成映射的部分就被處理為0。示例代碼如下:

#使用函數cv2.remap()實現圖像繞x軸和y軸的互換
import cv2
import numpy as np
img=cv2.imread('E:\python_opencv/tupian.jpg')
rows,cols=img.shape[:2]
mapx=np.zeros(img.shape[:2],np.float32)
mapy=np.zeros(img.shape[:2],np.float32)
for i in range(rows):
  for j in range(cols):
    mapx.itemset((i,j),i)  #mapx的值變為所在行的行號
    mapy.itemset((i,j),j)  #mapy的值變為所在列的列號
rst=cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)
cv2.imshow('original',img)
cv2.imshow('result',rst)
cv2.waitKey()
cv2.destroyAllWindows()

結果如圖:

可以看到,列數多于行數的部分被置為0(黑色)。

(六)圖像的縮放

重映射提供了cv2.remap()函數能夠實現圖像的放大或縮小。處理圖像后,可以將圖像固定在圍繞其中心的某個區域。

下面例程中,x軸和y軸均縮小為原來的0.25-0.75倍之間。

import cv2
import numpy as np
img=cv2.imread('E:\python_opencv/tupian.jpg')
rows,cols=img.shape[:2]
mapx=np.zeros(img.shape[:2],np.float32)
mapy=np.zeros(img.shape[:2],np.float32)
for i in range(rows):
  for j in range(cols):
    if 0.25*cols  i  0.75*cols and 0.25*rows  i  0.75*rows:
      #在目標圖像的x軸(0.25-0.75)倍之內生成縮小圖像
      mapx.itemset((i,j),2*(j-0.25*cols)+0.5)
      #在目標圖像的y軸(0.25-0.75)倍之內生成縮小圖像
      mapy.itemset((i,j),2*(i-rows*0.25)+0.5)
    else:
      #不在上述區域的點都取(0,0)坐標點的值
      mapx.itemset((i,j),0)
      mapy.itemset((i,j),0)
rst=cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)  #圖像縮放重映射
cv2.imshow('original',img)
cv2.imshow('result',rst)
cv2.waitKey()
cv2.destroyAllWindows()

到此這篇關于OpenCV+Python幾何變換的實現示例的文章就介紹到這了,更多相關OpenCV 幾何變換內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python基于OpenCV模板匹配識別圖片中的數字
  • Python OpenCV高斯金字塔與拉普拉斯金字塔的實現
  • Python OpenCV 基于圖像邊緣提取的輪廓發現函數
  • Python opencv操作深入詳解
  • Python+Opencv實現數字識別的示例代碼
  • python中的opencv和PIL(pillow)轉化操作
  • python利用opencv實現顏色檢測
  • python+opencv實現車道線檢測
  • python opencv實現圖像配準與比較
  • python OpenCV學習筆記

標簽:昆明 梅州 懷化 西寧 錫林郭勒盟 浙江 石家莊 文山

巨人網絡通訊聲明:本文標題《OpenCV+Python幾何變換的實現示例》,本文關鍵詞  OpenCV+Python,幾何,變換,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《OpenCV+Python幾何變換的實現示例》相關的同類信息!
  • 本頁收集關于OpenCV+Python幾何變換的實現示例的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲3atv精品一区二区三区| 亚洲欧美日韩一区二区| 99在线视频精品| 91伊人久久大香线蕉| 91成人免费在线| 91精品国产91综合久久蜜臀| 欧美r级在线观看| 中文久久乱码一区二区| 国产精品国产自产拍高清av| 亚洲免费在线观看| 美腿丝袜亚洲三区| eeuss影院一区二区三区| 色婷婷综合久久久中文一区二区 | 欧美二区三区91| 久久久久久久一区| 一区二区国产视频| 国产在线一区二区| 欧美视频精品在线观看| 国产精品麻豆视频| 久久国产剧场电影| 欧美在线观看视频一区二区三区| 欧美一区二区三区四区高清| 国产精品无人区| 精彩视频一区二区三区| 欧美性感一类影片在线播放| 精品国产91洋老外米糕| 亚洲va欧美va天堂v国产综合| 成人黄色国产精品网站大全在线免费观看 | 国产成人精品一区二区三区四区 | 不卡的av中国片| 国产日韩三级在线| 国产精品自拍网站| 国产片一区二区| 国产在线播放一区| 国产亚洲一二三区| 国产乱子轮精品视频| 26uuuu精品一区二区| 麻豆一区二区99久久久久| 日韩一级二级三级精品视频| 日韩av电影天堂| 日韩你懂的在线播放| 欧美aaa在线| 国产精品99久久久久久宅男| 国产成人夜色高潮福利影视| 国产精品亚洲午夜一区二区三区| 国产精一品亚洲二区在线视频| 国产黄色91视频| 91免费视频大全| 91精品国产综合久久福利软件 | 综合在线观看色| 亚洲精品久久久蜜桃| 五月婷婷欧美视频| 久久www免费人成看片高清| 丁香五精品蜜臀久久久久99网站 | 色八戒一区二区三区| 国产电影一区在线| 2020国产精品久久精品美国| 自拍视频在线观看一区二区| 日韩欧美成人一区| 精品国精品国产尤物美女| 欧美一级理论片| 欧美一区二区三区视频免费 | 亚洲成国产人片在线观看| 青青草成人在线观看| 成人精品在线视频观看| 在线观看日韩av先锋影音电影院| 一本色道**综合亚洲精品蜜桃冫| 日韩高清在线不卡| 亚洲女人的天堂| 久久精品亚洲精品国产欧美kt∨ | 欧美日韩精品一区二区三区蜜桃| 国产原创一区二区| 狠狠色丁香久久婷婷综| 一区二区三区在线观看视频| 国产精品素人视频| 日韩一区二区精品葵司在线| 91一区二区在线| 欧美性猛交xxxxxx富婆| 欧美色中文字幕| av在线综合网| 3d动漫精品啪啪一区二区竹菊 | 图片区小说区区亚洲影院| 国产欧美日韩另类视频免费观看| 亚洲视频中文字幕| 国产**成人网毛片九色| 欧美一级理论片| 一区二区三区四区视频精品免费| 北条麻妃国产九九精品视频| 欧美日韩国产一二三| 综合av第一页| 国产成人啪午夜精品网站男同| 3d动漫精品啪啪一区二区竹菊| 成人av在线电影| 91精品欧美一区二区三区综合在 | 欧美日韩成人激情| 欧美成人在线直播| 中文字幕一区视频| 日韩av不卡在线观看| 国产69精品久久久久毛片| 日本韩国欧美一区二区三区| 欧美成人精品二区三区99精品| 国产亚洲欧美一级| 欧美一区二区三区四区五区 | 日韩一级二级三级| 欧美在线制服丝袜| 国产精品久久久久久久第一福利| 欧美日本免费一区二区三区| eeuss鲁一区二区三区| 国产高清在线观看免费不卡| 精品国产一区二区亚洲人成毛片| 久久福利视频一区二区| 久久久精品欧美丰满| 91欧美一区二区| 麻豆精品视频在线观看免费| 亚洲素人一区二区| 久久综合九色综合97婷婷女人| 色噜噜狠狠色综合中国| 蜜臀av一区二区在线观看| 亚洲欧美日韩小说| 国产午夜亚洲精品不卡| 91精品办公室少妇高潮对白| 开心九九激情九九欧美日韩精美视频电影 | 亚洲国产激情av| 久久色中文字幕| 成人av在线一区二区三区| 在线观看日韩电影| 色综合一个色综合亚洲| 成人性视频免费网站| 久久福利资源站| 五月婷婷综合激情| 韩国av一区二区| 粉嫩av一区二区三区在线播放| 日本va欧美va瓶| 国产美女主播视频一区| 国产精品88888| 91在线码无精品| 一区二区三区中文字幕| 亚洲一区中文日韩| 亚洲综合久久久| 亚洲免费电影在线| 亚洲最大成人网4388xx| 亚洲欧洲日韩一区二区三区| 国产精品久久久久影院亚瑟| 国产精品久久99| 国产亚洲精品aa| 亚洲国产欧美在线人成| 一区二区三区中文字幕精品精品| 国产视频911| 亚洲夂夂婷婷色拍ww47| 麻豆国产91在线播放| 久久精品一区二区三区av| 一色桃子久久精品亚洲| 一区二区三区四区在线播放| 亚洲综合一区在线| 青青草一区二区三区| 日韩黄色一级片| 韩日精品视频一区| 国产精品66部| 91影视在线播放| 欧美成va人片在线观看| 久久综合丝袜日本网| 亚洲欧洲99久久| 日韩精品国产精品| 亚洲综合精品自拍| 极品少妇xxxx精品少妇| 在线视频亚洲一区| 国产精品福利一区二区| 免费欧美高清视频| 色88888久久久久久影院按摩| 91精品黄色片免费大全| 亚洲国产精品成人综合| 精品在线一区二区| 久久老女人爱爱| 蜜臀99久久精品久久久久久软件| 欧美视频一二三区| 亚洲狠狠爱一区二区三区| 色婷婷av一区二区三区大白胸| 2023国产精华国产精品| 免播放器亚洲一区| 日韩小视频在线观看专区| 亚洲一二三四区| 91久久人澡人人添人人爽欧美| 国产精品―色哟哟| 色菇凉天天综合网| 日本成人在线看| 国产精品三级视频| aaa国产一区| 亚洲欧美另类久久久精品2019| 成人精品gif动图一区| **欧美大码日韩| 91国偷自产一区二区三区观看| 一区二区理论电影在线观看| 色婷婷av一区二区| 日韩国产一二三区| 国产三级欧美三级| 在线精品视频一区二区三四| 91精品国产乱码久久蜜臀| 久久99久久99| 国产视频一区不卡| 91极品视觉盛宴|