国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【OpenCV】圖像變換(縮放、平移、旋轉(zhuǎn)、仿射)

這篇具有很好參考價(jià)值的文章主要介紹了【OpenCV】圖像變換(縮放、平移、旋轉(zhuǎn)、仿射)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


前言

圖像變換是指通過(guò)對(duì)圖像進(jìn)行縮放、平移、旋轉(zhuǎn)、仿射、透視等變換來(lái)改變圖像的形狀和大小。在本篇博客中,我們將詳細(xì)介紹OpenCV中的圖像變換函數(shù),并提供示例代碼以幫助讀者更好地理解這些函數(shù)的使用方法。


1. 縮放變換

縮放變換是指通過(guò)改變圖像的大小來(lái)改變圖像的形狀。在OpenCV中,可以使用resize函數(shù)實(shí)現(xiàn)縮放變換。該函數(shù)的原型如下:

void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

其中,src表示原圖像,dst表示輸出圖像,dsize表示輸出圖像的大小,fx和fy表示在x和y方向上的縮放因子,interpolation表示縮放方法,常見(jiàn)的有以下5種:

  1. cv2.INTER_NEAREST 最近鄰插值法;
  2. cv2.INTER_LINEAR 雙線性插值法(默認(rèn))(推薦放大處理);
  3. cv2.INTER_AREA 基于局部像素點(diǎn)的重采樣(推薦縮小處理);
  4. cv2.INTER_CUBIC 基于4x4像素鄰域的3次插值法(推薦放大處理);
  5. cv2.INTER_LANCZOS4 基于8x8像素鄰域的lanczos插值;

下面是一個(gè)簡(jiǎn)單的示例代碼,展示如何使用resize函數(shù)進(jìn)行圖像縮放:

import cv2

# 加載圖像
img = cv2.imread('input.jpg')

# 縮放圖像
resized_img = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)

# 顯示縮放后的圖像
cv2.imshow('Resized Image', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代碼中,我們首先使用cv2.imread函數(shù)加載輸入圖像,然后使用cv2.resize函數(shù)將圖像縮小一半,最后使用cv2.imshow函數(shù)顯示縮放后的圖像。

2. 平移變換

**平移變換是指通過(guò)改變圖像的位置來(lái)改變圖像的形狀。**在OpenCV中,可以使用warpAffine函數(shù)實(shí)現(xiàn)平移變換。該函數(shù)的原型如下:

void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())

其中,src表示原圖像,dst表示輸出圖像,M表示變換矩陣,dsize表示輸出圖像的大小,flags表示插值方法,borderMode表示邊界填充模式,borderValue表示填充顏色。

下面是一個(gè)簡(jiǎn)單的示例代碼,展示如何使用warpAffine函數(shù)進(jìn)行圖像平移:

import cv2
import numpy as np

# 加載圖像
img = cv2.imread('input.jpg')

# 定義平移矩陣
M = np.float32([[1, 0, 100], [0, 1, 50]])

# 平移圖像
translated_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

# 顯示平移后的圖像
cv2.imshow('Translated Image', translated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代碼中,我們首先使用cv2.imread函數(shù)加載輸入圖像,然后定義一個(gè)平移矩陣M,其中第一行表示在x方向上平移100個(gè)像素,第二行表示在y方向上平移50個(gè)像素。最后,我們使用cv2.warpAffine函數(shù)對(duì)圖像進(jìn)行平移,并使用cv2.imshow函數(shù)顯示平移后的圖像。

3. 旋轉(zhuǎn)變換

**旋轉(zhuǎn)變換是指通過(guò)改變圖像的方向來(lái)改變圖像的形狀。**在OpenCV中,可以使用getRotationMatrix2D和warpAffine函數(shù)實(shí)現(xiàn)旋轉(zhuǎn)變換。getRotationMatrix2D函數(shù)用于計(jì)算旋轉(zhuǎn)矩陣,warpAffine函數(shù)用于對(duì)圖像進(jìn)行旋轉(zhuǎn)變換。這兩個(gè)函數(shù)的原型如下:

Mat getRotationMatrix2D(Point2f center, double angle, double scale);
void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())

其中,center表示旋轉(zhuǎn)中心,angle表示旋轉(zhuǎn)角度,scale表示縮放因子,src表示原圖像,dst表示輸出圖像,M表示變換矩陣,dsize表示輸出圖像的大小,flags表示插值方法,borderMode表示邊界填充模式,borderValue表示填充顏色。

下面是一個(gè)簡(jiǎn)單的示例代碼,展示如何使用getRotationMatrix2D和warpAffine函數(shù)進(jìn)行圖像旋轉(zhuǎn):

import cv2
import numpy as np

# 加載圖像
img = cv2.imread('input.jpg')

# 計(jì)算旋轉(zhuǎn)矩陣
center = (img.shape[1] / 2, img.shape[0] / 2)
angle = 45
scale = 1
M = cv2.getRotationMatrix2D(center, angle, scale)

# 旋轉(zhuǎn)圖像
rotated_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

# 顯示旋轉(zhuǎn)后的圖像
cv2.imshow('Rotated Image', rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代碼中,我們首先使用cv2.imread函數(shù)加載輸入圖像,然后使用cv2.getRotationMatrix2D函數(shù)計(jì)算旋轉(zhuǎn)矩陣M,其中center表示旋轉(zhuǎn)中心,angle表示旋轉(zhuǎn)角度,scale表示縮放因子。最后,我們使用cv2.warpAffine函數(shù)對(duì)圖像進(jìn)行旋轉(zhuǎn),并使用cv2.imshow函數(shù)顯示旋轉(zhuǎn)后的圖像。

4. 仿射變換

**仿射變換是指通過(guò)線性變換來(lái)改變圖像的形狀。**在OpenCV中,可以使用getAffineTransform和warpAffine函數(shù)實(shí)現(xiàn)仿射變換。getAffineTransform函數(shù)用于計(jì)算仿射變換矩陣,warpAffine函數(shù)用于對(duì)圖像進(jìn)行仿射變換。這兩個(gè)函數(shù)的原型如下:

Mat getAffineTransform(const Point2f src[], const Point2f dst[]);
void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar() )

其中,src表示原圖像中的三個(gè)點(diǎn),dst表示變換后的三個(gè)點(diǎn),M表示變換矩陣,dsize表示輸出圖像的大小,flags表示插值方法,borderMode表示邊界填充模式,borderValue表示填充顏色。

下面是一個(gè)簡(jiǎn)單的示例代碼,展示如何使用getAffineTransform和warpAffine函數(shù)進(jìn)行仿射變換:

import cv2
import numpy as np

# 加載圖像
img = cv2.imread('input.jpg')

# 定義原圖像中的三個(gè)點(diǎn)和變換后的三個(gè)點(diǎn)
src_points = np.float32([[50, 50], [200, 50], [50, 200]])
dst_points = np.float32([[10, 100], [200, 50], [100, 250]])

# 計(jì)算仿射變換矩陣
M = cv2.getAffineTransform(src_points, dst_points)

# 仿射變換圖像
affine_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

# 顯示變換后的圖像
cv2.imshow('Affine Image', affine_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代碼中,我們首先使用cv2.imread函數(shù)加載輸入圖像,然后定義原圖像中的三個(gè)點(diǎn)和變換后的三個(gè)點(diǎn),其中src_points表示原圖像中的三個(gè)點(diǎn)的坐標(biāo),dst_points表示變換后的三個(gè)點(diǎn)的坐標(biāo)。最后,我們使用cv2.getAffineTransform函數(shù)計(jì)算仿射變換矩陣M,并使用cv2.warpAffine函數(shù)對(duì)圖像進(jìn)行仿射變換,并使用cv2.imshow函數(shù)顯示變換后的圖像。

除了以上介紹的幾種變換,OpenCV中還提供了許多其他的圖像變換函數(shù),例如透視變換、極坐標(biāo)變換等等,后續(xù)給大家分享。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-731348.html

到了這里,關(guān)于【OpenCV】圖像變換(縮放、平移、旋轉(zhuǎn)、仿射)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • OpenCV(圖像處理)-基于Python-圖像的基本變換-平移-翻轉(zhuǎn)-仿射變換-透視變換

    OpenCV(圖像處理)-基于Python-圖像的基本變換-平移-翻轉(zhuǎn)-仿射變換-透視變換

    為了方便開(kāi)發(fā)人員的操作,OpenCV還提供了一些圖像變換的API,本篇文章講簡(jiǎn)單介紹各種API的使用,并附上一些樣例。 圖像縮放函數(shù),用于把圖像按指定的尺寸放大或縮小。 dst = cv2.resize(src, dsize, fx, fy, interpolation) dst = 生成的目的圖像 src:需要變換的原圖像 disize:(x, y)需要

    2024年02月08日
    瀏覽(99)
  • OpenCV庫(kù)進(jìn)行圖像旋轉(zhuǎn)、仿射變換和透視變換
  • 【C++ OpenCV】圖像變換:連接、尺寸、翻轉(zhuǎn)、旋轉(zhuǎn)、仿射變換

    【C++ OpenCV】圖像變換:連接、尺寸、翻轉(zhuǎn)、旋轉(zhuǎn)、仿射變換

    目錄 圖像縮放變換 圖像翻轉(zhuǎn) 圖像拼接 縱向拼接 橫向拼接 圖像插值原理 作用 單線性插值 雙線性插值的公式 雙線性插值的例子 雙線性插值的直觀展示 意義 仿射變換 圖像旋轉(zhuǎn) 實(shí)操 一、實(shí)現(xiàn)圖像旋轉(zhuǎn) 二、根據(jù)定義的三個(gè)點(diǎn)實(shí)現(xiàn)仿射變換,并且求取仿射變換矩陣 源碼 src -

    2024年01月18日
    瀏覽(1257)
  • Halcon用矩陣實(shí)現(xiàn)圖像變換(平移,旋轉(zhuǎn),縮放,鏡像等)

    Halcon用矩陣實(shí)現(xiàn)圖像變換(平移,旋轉(zhuǎn),縮放,鏡像等)

    目錄 圖像變換介紹 ?用Halcon自帶的算子實(shí)現(xiàn)圖像變換 使用矩陣來(lái)實(shí)現(xiàn)相關(guān)算子的功能 一、平移 二、旋轉(zhuǎn) 三、縮放 四、鏡像 完整代碼 ????????在halcon中經(jīng)常會(huì)用到圖像變換的操作,然后這次作業(yè)是用矩陣來(lái)實(shí)現(xiàn)相關(guān)算子的功能,學(xué)到了挺多的所以就記錄下來(lái)方便復(fù)習(xí)。

    2024年04月17日
    瀏覽(231)
  • 數(shù)字圖像處理 matlab圖像的幾何運(yùn)算 實(shí)驗(yàn)三 旋轉(zhuǎn) 縮放 裁剪 鏡像變換 平移

    數(shù)字圖像處理 matlab圖像的幾何運(yùn)算 實(shí)驗(yàn)三 旋轉(zhuǎn) 縮放 裁剪 鏡像變換 平移

    原圖: 讀取原圖(這里我的圖片名字是atm.png): 我們先說(shuō)原理,圖像旋轉(zhuǎn)的本質(zhì)是向量的旋轉(zhuǎn)。 矩陣乘法的實(shí)質(zhì)是進(jìn)行線性變換,因此對(duì)一個(gè)向量進(jìn)行旋轉(zhuǎn)操作也可以通過(guò)矩陣和向量相乘的方式進(jìn)行。 因?yàn)閳D像都是通過(guò)二維矩陣存放的(單通道),所以對(duì)圖像進(jìn)行旋轉(zhuǎn)時(shí)

    2024年02月07日
    瀏覽(25)
  • 我在Vscode學(xué)OpenCV 幾何變換(縮放、翻轉(zhuǎn)、仿射變換、透視、重映射)

    我在Vscode學(xué)OpenCV 幾何變換(縮放、翻轉(zhuǎn)、仿射變換、透視、重映射)

    幾何變換指的是將一幅圖像映射到另一幅圖像內(nèi)的操作。 cv2.warpAffine :使用仿射變換矩陣對(duì)圖像進(jìn)行變換,可以實(shí)現(xiàn)平移、縮放和旋轉(zhuǎn)等操作。 cv2.warpPerspective :使用透視變換矩陣對(duì)圖像進(jìn)行透視變換,可以實(shí)現(xiàn)鏡頭校正、圖像糾偏等操作。 cv2.getAffineTransform :計(jì)算仿射變換

    2024年02月05日
    瀏覽(33)
  • 【OpenCV ? c++】圖像幾何變換 | 圖像仿射變換

    【OpenCV ? c++】圖像幾何變換 | 圖像仿射變換

    ?? 個(gè)人簡(jiǎn)介:CSDN「 博客新星 」TOP 10 , C/C++ 領(lǐng)域新星創(chuàng)作者 ?? 作 ?? 者: 錫蘭_CC ?? ?? 專 ?? 欄: 【OpenCV ? c++】計(jì)算機(jī)視覺(jué) ?? 若有幫助,還請(qǐng) 關(guān)注?點(diǎn)贊?收藏 ,不行的話我再努努力??????

    2024年02月16日
    瀏覽(92)
  • OpenCV(十一):圖像仿射變換

    OpenCV(十一):圖像仿射變換

    目錄 1.圖像仿射變換介紹 ?仿射變換: 仿射變換矩陣: 仿射變換公式: 2.仿射變換函數(shù) 仿射變換函數(shù):warpAffine() 圖像旋轉(zhuǎn):getRotationMatrix2D() 計(jì)算仿射變換矩陣:getAffineTransform()? 3.demo 1.圖像仿射變換介紹 ?仿射變換: ? ? ? ?仿射變換是由平移、縮放、旋轉(zhuǎn)、翻轉(zhuǎn)和錯(cuò)切組

    2024年02月10日
    瀏覽(90)
  • 仿射變換中的旋轉(zhuǎn)縮放變換矩陣推導(dǎo)

    仿射變換中的旋轉(zhuǎn)縮放變換矩陣推導(dǎo)

    仿射變換可以將矩陣形狀轉(zhuǎn)換為平行四邊形??梢詳D壓形狀,但是必須保持兩邊平行。常見(jiàn)的是旋轉(zhuǎn)、縮放、平移變換??s放和平移比較簡(jiǎn)單,本文重點(diǎn)推導(dǎo)旋轉(zhuǎn)縮放變換矩陣。 任意一點(diǎn) ( x 0 , y 0 ) (x_0,y_0) ( x 0 ? , y 0 ? ) 可以看成 ( x 0 , 0 ) (x_0, 0) ( x 0 ? , 0 ) 向量和 ( 0 ,

    2024年04月24日
    瀏覽(19)
  • (opencv)圖像幾何變換——平移

    (opencv)圖像幾何變換——平移

    圖像的平移操作是將圖像的所有像素坐標(biāo)進(jìn)行水平或垂直方向移動(dòng),也就是將所有像素點(diǎn)按照給定的偏移量在水平方向沿x軸、垂直方向上沿y軸移動(dòng)。平移變換分為兩種類型:圖像大小變化與圖像大小不變。第一種類型保證圖像平移的完整信息,第二種圖像導(dǎo)致原始圖像的部

    2024年02月08日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包