女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV中圖像旋轉(zhuǎn)函數(shù)操作原理及基本技巧

OpenCV學(xué)堂 ? 來(lái)源:OpenCV學(xué)堂 ? 2023-11-14 09:40 ? 次閱讀

01

引言

初學(xué)圖像處理,很多人遇到的第一關(guān)就是圖像旋轉(zhuǎn),圖像旋轉(zhuǎn)是圖像幾何變換中最具代表性的操作,包含了插值、背景處理、三角函數(shù)等相關(guān)知識(shí),一個(gè)變換矩陣跟計(jì)算圖像旋轉(zhuǎn)之后的大小公式就讓很多開(kāi)發(fā)者最后直接調(diào)用函數(shù)了事,但是其實(shí)這個(gè)東西并沒(méi)有這么難懂,可以說(shuō)主要是之前別人寫(xiě)的公式太嚇人,小編很久以前第一次接觸的也是被嚇暈了!所以決定從程序員可以接受的角度從新介紹一下圖像旋轉(zhuǎn)基本原理與OpenCV中圖像旋轉(zhuǎn)函數(shù)操作的基本技巧。

圖像旋轉(zhuǎn)基本原理

旋轉(zhuǎn)涉及到兩個(gè)問(wèn)題,一個(gè)是圖像旋轉(zhuǎn)之后的大小會(huì)發(fā)生改變,會(huì)產(chǎn)生背景,通過(guò)背景填充方式都是填充黑色,此外旋轉(zhuǎn)還是產(chǎn)生像素的位置遷移,新的位置像素需要通過(guò)插值計(jì)算獲得,常見(jiàn)的插值方式有最近鄰、線性插值、立方插值等。

首先看旋轉(zhuǎn)之后的圖像寬高變化,如下圖所示:

c04e2600-828a-11ee-939d-92fbcf53809c.png

c05ca4f0-828a-11ee-939d-92fbcf53809c.png

這個(gè)是正常的平面坐標(biāo)系中的旋轉(zhuǎn)矩陣,可以簡(jiǎn)寫(xiě)為:

c06ca1a2-828a-11ee-939d-92fbcf53809c.png

是一個(gè)2x3的矩陣,但是在圖像中左上角是原點(diǎn),要實(shí)現(xiàn)圍繞圖像的中心位置旋轉(zhuǎn),M就要重新計(jì)算,所以O(shè)penCV中的圖像旋轉(zhuǎn)矩陣為:

c079f762-828a-11ee-939d-92fbcf53809c.png

其中scale是表示矩陣支持旋轉(zhuǎn)+放縮,這里可以把Scale=1。第三列是圖像旋轉(zhuǎn)之后中心位置平移量。

函數(shù)支持

OpenCV中支持圖像旋轉(zhuǎn)的函數(shù)有兩個(gè),一個(gè)是直接支持旋轉(zhuǎn)的函數(shù),但是它支持的是90,180,270這樣的特殊角度旋轉(zhuǎn)。

void cv::rotate   (
    InputArray    src,
    OutputArray dst,
    int rotateCode
)

其中rotateCode參數(shù)必須為:

ROTATE_180,
ROTATE_90_CLOCKWISE
ROTATE_90_COUNTERCLOCKWISE

函數(shù)warpAffine支持任意角度的旋轉(zhuǎn),通過(guò)定義M矩陣實(shí)現(xiàn)

void cv::warpAffine(
         InputArray      src, // 輸入圖像
         OutputArray dst, // 輸出圖像
         InputArray      M, // 旋轉(zhuǎn)矩陣
         Size         dsize, // 輸出圖像大小
         int   flags = INTER_LINEAR, // 像素插值方式
         int   borderMode = BORDER_CONSTANT, // 背景填充默認(rèn)為常量
         const Scalar &        borderValue = Scalar() // 填充顏色默認(rèn)為黑色
)

但是M如何生成與獲取,OpenCV中提供了一個(gè)函數(shù)根據(jù)輸入的參數(shù)自動(dòng)生成旋轉(zhuǎn)矩陣M,該函數(shù)為

Mat cv::getRotationMatrix2D(
         Point2f   center,
         double    angle,
         double    scale
)

代碼演示

使用自定義的M矩陣實(shí)現(xiàn)圖像旋轉(zhuǎn)


h,w,c=src.shape
#定義矩陣
M=np.zeros((2,3),dtype=np.float32)
#定義角度
alpha=np.cos(np.pi/4.0)
beta=np.sin(np.pi/4.0)
print("alpha:",alpha)
#初始化矩陣
M[0,0]=alpha
M[1,1]=alpha
M[0,1]=beta
M[1,0]=-beta
cx=w/2
cy=h/2
tx=(1-alpha)*cx-beta*cy
ty=beta*cx+(1-alpha)*cy
M[0,2]=tx
M[1,2]=ty
#執(zhí)行旋轉(zhuǎn)
dst=cv.warpAffine(src,M,(w,h))
cv.imshow("rotate-center-demo",dst)

重新計(jì)算旋轉(zhuǎn)之后的圖像大小,實(shí)現(xiàn)無(wú)Crop版本的圖像旋轉(zhuǎn)

h,w,c=src.shape
M=np.zeros((2,3),dtype=np.float32)
alpha=np.cos(np.pi/4.0)
beta=np.sin(np.pi/4.0)
print("alpha:",alpha)

#初始旋轉(zhuǎn)矩陣
M[0,0]=alpha
M[1,1]=alpha
M[0,1]=beta
M[1,0]=-beta
cx=w/2
cy=h/2
tx=(1-alpha)*cx-beta*cy
ty=beta*cx+(1-alpha)*cy
M[0,2]=tx
M[1,2]=ty

#changewithfullsize
bound_w=int(h*np.abs(beta)+w*np.abs(alpha))
bound_h=int(h*np.abs(alpha)+w*np.abs(beta))

#添加中心位置遷移
M[0,2]+=bound_w/2-cx
M[1,2]+=bound_h/2-cy
dst=cv.warpAffine(src,M,(bound_w,bound_h))
cv.imshow("rotatewithoutcropping",dst)

背景隨便變化+無(wú)Crop版本的圖像旋轉(zhuǎn)動(dòng)態(tài)演示

degree=1.0
d1=np.pi/180.0
whileTrue:
alpha=np.cos(d1*degree)
beta=np.sin(d1*degree)
M[0,0]=alpha
M[1,1]=alpha
M[0,1]=beta
M[1,0]=-beta
cx=w/2
cy=h/2
tx=(1-alpha)*cx-beta*cy
ty=beta*cx+(1-alpha)*cy
M[0,2]=tx
M[1,2]=ty

#changewithfullsize
bound_w=int(h*np.abs(beta)+w*np.abs(alpha))
bound_h=int(h*np.abs(alpha)+w*np.abs(beta))
M[0,2]+=bound_w/2-cx
M[1,2]+=bound_h/2-cy
red=np.random.randint(0,255)
green=np.random.randint(0,255)
blue=np.random.randint(0,255)
dst=cv.warpAffine(src,M,(bound_w,bound_h),borderMode=cv.BORDER_CONSTANT,borderValue=(blue,green,red))
cv.imshow("rotate+background",dst)
c=cv.waitKey(1000)
ifc==27:
break
degree+=1
print("degree",degree)
ifdegree>360:
degree=degree%360

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4369

    瀏覽量

    64187
  • OpenCV
    +關(guān)注

    關(guān)注

    32

    文章

    642

    瀏覽量

    42431

原文標(biāo)題:經(jīng)驗(yàn) | OpenCV圖像旋轉(zhuǎn)的原理與技巧

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【Rayeager PX2分享】OpenCV入門(mén)之圖像顯示

    $@ -c $
    發(fā)表于 04-14 15:49

    Vivado HLS實(shí)現(xiàn)OpenCV圖像處理的設(shè)計(jì)流程與分析

    本文通過(guò)對(duì)OpenCV圖像類(lèi)型和函數(shù)處理方法的介紹,通過(guò)設(shè)計(jì)實(shí)例描述在vivadoHLS調(diào)用Open
    發(fā)表于 07-08 08:30

    如何使用PythonOpenCV模塊檢測(cè)顏色

    numpy然后,導(dǎo)入模塊。讀取圖像并使用 OpenCV 模塊的 cvtColor() 函數(shù)將BGR圖像轉(zhuǎn)換為 HSV (色調(diào)、飽和度、值
    發(fā)表于 02-09 16:31

    OpenCV圖像處理編程研究

    OpenCV是一種用于數(shù)字圖像處理和計(jì)算機(jī)視覺(jué)的函數(shù)庫(kù),由Intel微處理器研究實(shí)驗(yàn)室的視覺(jué)交互組開(kāi)發(fā),采用的開(kāi)發(fā)語(yǔ)言是C++。本文通過(guò)學(xué)習(xí)掌握在OpenCV下進(jìn)行數(shù)字
    發(fā)表于 06-25 17:52 ?0次下載

    基于OpenCV圖像特征智能識(shí)別系統(tǒng)設(shè)計(jì)

    ,通過(guò)OpenCV的相關(guān)函數(shù)進(jìn)行特征圖像的識(shí)別。針對(duì)食品藥品加工過(guò)程的特定問(wèn)題進(jìn)行模擬,實(shí)驗(yàn)表明,該系統(tǒng)具有較好的識(shí)別速度和識(shí)別效率,具有一定的實(shí)用性。
    發(fā)表于 12-31 09:20 ?20次下載

    opencv如何實(shí)現(xiàn)圖像旋轉(zhuǎn)_原理是什么

    旋轉(zhuǎn)一般是指將圖像圍繞某一指定點(diǎn)旋轉(zhuǎn)一定的角度,圖像旋轉(zhuǎn)后會(huì)有一部分圖像轉(zhuǎn)出顯示區(qū)域,可以截圖那
    發(fā)表于 12-04 16:40 ?2.9w次閱讀
    <b class='flag-5'>opencv</b>如何實(shí)現(xiàn)<b class='flag-5'>圖像</b><b class='flag-5'>旋轉(zhuǎn)</b>_原理是什么

    OpenCV函數(shù)圖像處理目錄說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是OpenCV函數(shù)圖像處理目錄說(shuō)明。
    發(fā)表于 10-29 15:55 ?12次下載
    <b class='flag-5'>OpenCV</b><b class='flag-5'>函數(shù)</b><b class='flag-5'>圖像</b>處理目錄說(shuō)明

    如何使用OpenCV訪問(wèn)Mat圖像每個(gè)像素的值

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用OpenCV訪問(wèn)Mat圖像每個(gè)像素的值
    發(fā)表于 11-26 16:13 ?4次下載

    OpenCV的基本操作

    今天這一篇文章主要記錄一下OpenCV中一些基本的操作,包括讀取圖片,視頻以及反轉(zhuǎn)圖像的幾種操作: 一:圖片的載入 圖片載入很常用,很實(shí)用。。。 二:讀取視頻 讀取視頻分為從攝像頭中讀
    的頭像 發(fā)表于 11-02 15:04 ?2083次閱讀
    <b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>

    OpenCV色彩空間的轉(zhuǎn)換函數(shù)

    在這一篇文章,我們將會(huì)學(xué)習(xí)使用一下OpenCV色彩空間的轉(zhuǎn)換函數(shù),我們這里說(shuō)的色彩空間是說(shuō)的使用多種顏色(通常指三種以上),來(lái)表示顏色的方法,像是我們平時(shí)所說(shuō)的RGB,HSV,YU
    的頭像 發(fā)表于 11-02 15:23 ?2832次閱讀

    OpenCV圖像的計(jì)算

    今天我們一起學(xué)習(xí)的是OpenCV圖像的計(jì)算,在圖像計(jì)算,分為像素級(jí)運(yùn)算和代數(shù)運(yùn)算這兩大類(lèi),今天我們借助
    的頭像 發(fā)表于 11-03 17:45 ?2326次閱讀

    OpenCV實(shí)現(xiàn)了圖像形態(tài)學(xué)什么常見(jiàn)操作

    圖像形態(tài)學(xué)是圖像處理的分支學(xué)科,在二值圖像處理占有重要地位、OpenCV實(shí)現(xiàn)了
    的頭像 發(fā)表于 05-27 14:11 ?1627次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>中</b>實(shí)現(xiàn)了<b class='flag-5'>圖像</b>形態(tài)學(xué)什么常見(jiàn)<b class='flag-5'>操作</b>?

    如何使用OpenCV和Python從圖像中提取感興趣區(qū)域

    今天我們將一起探究如何使用OpenCV和Python從圖像中提取感興趣區(qū)域(ROI)。 在之間的文章,我們完成了圖像邊緣提取,例如從臺(tái)球桌中提取桌邊。使用了簡(jiǎn)單的
    的頭像 發(fā)表于 02-07 14:42 ?2092次閱讀

    OpenCV庫(kù)在圖像處理和深度學(xué)習(xí)的應(yīng)用

    本文深入淺出地探討了OpenCV庫(kù)在圖像處理和深度學(xué)習(xí)的應(yīng)用。從基本概念和操作,到復(fù)雜的圖像變換和深度學(xué)習(xí)模型的使用,文章以詳盡的代碼和解
    的頭像 發(fā)表于 08-18 11:33 ?1140次閱讀

    OpenCV圖像識(shí)別C++代碼

    的頭文件 在您的C++代碼,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發(fā)表于 07-16 10:42 ?3815次閱讀