超詳細注釋之OpenCV操作圖像平移轉(zhuǎn)換
這篇博客將介紹如何使用Python,OpenCV對圖像進行平移轉(zhuǎn)換。平移是圖像沿x軸和y軸的移動。使用平移,可以將圖像上下左右移動,以及上述任意組合。要使用OpenCV平移圖像,只需3步:
- 從磁盤加載圖像
- 定義仿射變換矩陣
- 應用cv2.warpAffine仿射函數(shù)來執(zhí)行平移
1. 效果圖
用了穎寶明蘭的新娘圖片來演示效果~,喜歡這張圖的原因,是這里有一首經(jīng)典的催妝詩,
《催妝詩》
金車欲上怯東風,排云見月醉酒空。
獨自仙姿羞半吐,冰瓷露白借微紅。
原圖如下:

向右向下平移圖 VS 向上向左平移圖 VS 向下平移效果圖如下:

2. 原理
轉(zhuǎn)化矩陣
M = np.float32([
[1, 0, shiftX],
[0, 1, shiftY]
])
轉(zhuǎn)換矩陣M被定義為浮點數(shù)組。 矩陣的第一行是[1,0,t{x}],其中t{x}是將圖像向左或向右移動的像素數(shù)。t{x}的負值將使圖像向左移動,正值將使圖像向右移動。 矩陣的第二行定義為[0,1,t{y}],其中t{y}是將圖像上下移動的像素數(shù)。t{y}的負值將使圖像上移,正值將使圖像下移。
3. 源碼
# 對圖像進行平移
# USAGE
# python opencv_translate.py
import argparse
import cv2
import imutils
# 導入必要的包
import numpy as np
# 構建命令行參數(shù)及解析
# --image 輸入圖像路徑
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str, default="ml.jpg",
help="path to the input image")
args = vars(ap.parse_args())
# 從磁盤加載圖像并顯示
image = cv2.imread(args["image"])
image = imutils.resize(image, width=300)
cv2.imshow("Original", image)
# 將圖像向右移動25像素,像下移動50像素
M = np.float32([[1, 0, 25], [0, 1, 50]])
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
cv2.imshow("Shifted Down and Right", shifted)
# 修改圖像向左移動50像素,向上移動90像素
M = np.float32([[1, 0, -50], [0, 1, -90]])
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
cv2.imshow("Shifted Up and Left", shifted)
# 用一行代碼實現(xiàn)平移——imutils.translate
shifted = imutils.translate(image, 0, 100)
cv2.imshow("Shifted Down", shifted)
cv2.waitKey(0)
cv2.destroyAllWindows()
參考
- https://www.pyimagesearch.com/2021/02/03/opencv-image-translation/
- imutils.translate 源碼github~
到此這篇關于超詳細注釋之OpenCV操作圖像平移轉(zhuǎn)換的文章就介紹到這了,更多相關OpenCV圖像平移轉(zhuǎn)換內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
關注官方微信