91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中OpenCV圖像平移怎么實現

發布時間:2021-06-04 14:48:48 來源:億速云 閱讀:380 作者:小新 欄目:開發技術

小編給大家分享一下Python中OpenCV圖像平移怎么實現,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

每次學習新東西的時候,橡皮擦都是去海量檢索,然后找到適合自己理解的部分。

再將其拼湊成一個小的系統,爭取對該內容有初步理解。

今天這 1 個小時,核心要學習的是圖像的平移,在電腦上隨便打開一張圖片,實現移動都非常簡單,但是在代碼中,出現了一些新的概念。

檢索 OpenCV 圖像平移相關資料時,碰到的第一個新概念是就是 仿射變換

每次看到這樣子的數學名字,必然心中一涼,做為一個數學小白,又要瑟瑟發抖了。

百度一下,看看百科中是如何介紹的。

Python中OpenCV圖像平移怎么實現

看過上圖中的一些相關簡介之后,對于這個概念也并沒有太深刻的理解,本著先用起來,在補充理論的學習觀點,我們先實現圖像平移。

學習過程中,碰到一些概念性的東西,可以先應用起來,然后在后續的深入學習過程中,逐步去完善它們。

cv2.warpAffine() 仿射變換

基于該方法去尋找相關資料,得到仿射變換的基本概念,從二維坐標到二維坐標之間的線性變換,并且要保持二維圖形的“平直性” 和 “平行性”。

仿射變換中,包含平移,縮放,翻轉,旋轉,剪切。

該方法的語法結構如下:

dst = cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])

參數說明:

  • src:輸入圖像

  • M:2*3 transformation matrix (轉變矩陣)

  • dsize:輸出圖像的大小,格式為(cols,rows),width 對應 cols,height 對應 rows

  • flags: 可選參數,插值方法的組合(int 類型),默認值 INTER_LINEAR

  • borderMode:可選參數,邊界像素模式(int 類型),默認值 BORDER_CONSTANT

  • borderValue:可選參數,邊界填充值; 默認情況下,默認值 Scalar()即 0

官方可查閱的英文資料如下:

Python中OpenCV圖像平移怎么實現

插值方式(flags)有如下類型:

  • INTER_LINEAR 線性插值

  • INTER_NEAREST 最近鄰插值

  • INTER_AREA 區域插值

  • INTER_CUBIC 三次樣條插值

  • INTER_LANCZOS4 Lanczos 插值

一般情況下,使用 wrapAffine 前三個參數,即 warpAffine(img,M,(rows,cols)) 實現基本的仿射變換效果,但是這種情況會出現 黑邊 現象。

最后一個參數為 borderValue,邊界填充的顏色,默認為黑色,可以自行設置為其它顏色。

具體代碼

圖像平移是圖像位置的移動。在平移前,需要先轉換矩陣 M,,其中 txty 表示在(x,y)方向上的位移,如下所示:

Python中OpenCV圖像平移怎么實現

測試代碼如下,重要部分在注釋中進行說明。

import numpy as np
import cv2 as cv

img = cv.imread('10.jpg', 1)
rows, cols, channels = img.shape
# [1,0,100] 右移 100, [0,1,50] 下移 50
M = np.float32([[1, 0, 100], [0, 1, 50]])
res = cv.warpAffine(img, M, (cols, rows))
cv.imshow("img", res)
cv.waitKey()

特別說明:
cv.warpAffine 方法的第三個參數是輸出圖像的大小,其形式應為(width,height)。記住 width =列數(cols),height =行數(rows)。

以下為代碼運行結果。

Python中OpenCV圖像平移怎么實現

關于 borderMode 參數值的說明:

該部分內容涉及邊緣處理,翻閱手冊過程找到的說明指向 BorderTypes。翻閱了一下,依舊是有些超綱,可以先記錄下相關內容,日后在進行回顧,參考地址。

所有值羅列如下:

  • BORDER_CONSTANT = 0

  • BORDER_REPLICATE = 1

  • BORDER_REFLECT = 2

  • BORDER_WRAP = 3

  • BORDER_REFLECT_101 = 4

  • BORDER_TRANSPARENT = 5

  • BORDER_REFLECT101 = BORDER_REFLECT_101

  • BORDER_DEFAULT = BORDER_REFLECT_101

  • BORDER_ISOLATED = 16

Python中OpenCV圖像平移怎么實現

borderValue:當圖像邊界處理方式為 BORDER_CONSTANT 時的填充值。

測試代碼如下:

import numpy as np
import cv2 as cv

img = cv.imread('10.jpg', 1)
rows, cols, channels = img.shape
M = np.float32([[1, 0, 100], [0, 1, 50]])
res = cv.warpAffine(img, M, (cols, rows),
                    borderMode=cv.BORDER_CONSTANT, borderValue=(200, 66, 66))
cv.imshow("img", res)
cv.waitKey()

以上是“Python中OpenCV圖像平移怎么實現”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大厂| 新化县| 依兰县| 滨州市| 鹤庆县| 泽普县| 镇雄县| 米易县| 达拉特旗| 磴口县| 永胜县| 吕梁市| 和政县| 新河县| 镇赉县| 博湖县| 柏乡县| 徐州市| 平潭县| 龙川县| 华容县| 肥城市| 元谋县| 彭州市| 梧州市| 政和县| 临猗县| 大石桥市| 新绛县| 晋城| 塔城市| 思南县| 蓝山县| 瓦房店市| 车致| 泸水县| 怀宁县| 历史| 海伦市| 剑川县| 延吉市|