在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenCV中圖像旋轉函數操作原理及基本技巧

OpenCV學堂 ? 來源:OpenCV學堂 ? 2023-11-14 09:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01

引言

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

圖像旋轉基本原理

旋轉涉及到兩個問題,一個是圖像旋轉之后的大小會發生改變,會產生背景,通過背景填充方式都是填充黑色,此外旋轉還是產生像素的位置遷移,新的位置像素需要通過插值計算獲得,常見的插值方式有最近鄰、線性插值、立方插值等。

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

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

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

這個是正常的平面坐標系中的旋轉矩陣,可以簡寫為:

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

是一個2x3的矩陣,但是在圖像中左上角是原點,要實現圍繞圖像的中心位置旋轉,M就要重新計算,所以OpenCV中的圖像旋轉矩陣為:

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

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

函數支持

OpenCV中支持圖像旋轉的函數有兩個,一個是直接支持旋轉的函數,但是它支持的是90,180,270這樣的特殊角度旋轉。

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

其中rotateCode參數必須為:

ROTATE_180,
ROTATE_90_CLOCKWISE
ROTATE_90_COUNTERCLOCKWISE

函數warpAffine支持任意角度的旋轉,通過定義M矩陣實現

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

但是M如何生成與獲取,OpenCV中提供了一個函數根據輸入的參數自動生成旋轉矩陣M,該函數為

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

代碼演示

使用自定義的M矩陣實現圖像旋轉


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
#執行旋轉
dst=cv.warpAffine(src,M,(w,h))
cv.imshow("rotate-center-demo",dst)

重新計算旋轉之后的圖像大小,實現無Crop版本的圖像旋轉

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

#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)

背景隨便變化+無Crop版本的圖像旋轉動態演示

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

編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4379

    瀏覽量

    64728
  • OpenCV
    +關注

    關注

    32

    文章

    642

    瀏覽量

    42772

原文標題:經驗 | OpenCV圖像旋轉的原理與技巧

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【Rayeager PX2分享】OpenCV入門之圖像顯示

    $@ -c $
    發表于 04-14 15:49

    Vivado HLS實現OpenCV圖像處理的設計流程與分析

    本文通過對OpenCV圖像類型和函數處理方法的介紹,通過設計實例描述在vivadoHLS調用Open
    發表于 07-08 08:30

    如何使用PythonOpenCV模塊檢測顏色

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

    OpenCV圖像處理編程研究

    OpenCV是一種用于數字圖像處理和計算機視覺的函數庫,由Intel微處理器研究實驗室的視覺交互組開發,采用的開發語言是C++。本文通過學習掌握在OpenCV下進行數字
    發表于 06-25 17:52 ?0次下載

    基于OpenCV圖像特征智能識別系統設計

    ,通過OpenCV的相關函數進行特征圖像的識別。針對食品藥品加工過程的特定問題進行模擬,實驗表明,該系統具有較好的識別速度和識別效率,具有一定的實用性。
    發表于 12-31 09:20 ?20次下載

    opencv如何實現圖像旋轉_原理是什么

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

    OpenCV函數圖像處理目錄說明

    本文檔的主要內容詳細介紹的是OpenCV函數圖像處理目錄說明。
    發表于 10-29 15:55 ?12次下載
    <b class='flag-5'>OpenCV</b><b class='flag-5'>函數</b><b class='flag-5'>圖像</b>處理目錄說明

    如何使用OpenCV訪問Mat圖像每個像素的值

    本文檔的主要內容詳細介紹的是如何使用OpenCV訪問Mat圖像每個像素的值
    發表于 11-26 16:13 ?4次下載

    OpenCV的基本操作

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

    OpenCV色彩空間的轉換函數

    在這一篇文章,我們將會學習使用一下OpenCV色彩空間的轉換函數,我們這里說的色彩空間是說的使用多種顏色(通常指三種以上),來表示顏色的方法,像是我們平時所說的RGB,HSV,YU
    的頭像 發表于 11-02 15:23 ?2866次閱讀

    OpenCV圖像的計算

    今天我們一起學習的是OpenCV圖像的計算,在圖像計算,分為像素級運算和代數運算這兩大類,今天我們借助
    的頭像 發表于 11-03 17:45 ?2373次閱讀

    OpenCV實現了圖像形態學什么常見操作

    圖像形態學是圖像處理的分支學科,在二值圖像處理占有重要地位、OpenCV實現了
    的頭像 發表于 05-27 14:11 ?1675次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>中</b>實現了<b class='flag-5'>圖像</b>形態學什么常見<b class='flag-5'>操作</b>?

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

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

    OpenCV庫在圖像處理和深度學習的應用

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

    OpenCV圖像識別C++代碼

    的頭文件 在您的C++代碼,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發表于 07-16 10:42 ?4463次閱讀
    主站蜘蛛池模板: 国产成人a毛片 | 天天看天天操 | 亚洲一区二区三区不卡视频 | 久久极品| 成人国产激情福利久久精品 | 欧美日本一区二区三区生 | 欧美又粗又硬又大久久久 | 亚洲欧美在线视频免费 | 成年美女黄网站色大免费视频 | 69日本xxⅹxxxxx18| 日本三级香港三级三级人!妇久 | 女攻各种play男受h | 天天射天天操天天 | 四虎4hu影库免费永久国产 | 日韩特黄特色大片免费视频 | 好男人社区www的视频免费 | 中文一区二区 | 午夜久久久久久 | 欧美黄又粗暴一进一出抽搐 | 国产亚洲第一伦理第一区 | 一级片在线播放 | 手机看片日韩福利 | 国产馆精品推荐在线观看 | 色多多在线视频 | 日韩成人一级 | 天堂男人网| 91正在 播放 | 精品一区二区影院在线 | 久操青青| 亚洲成人黄色 | 激情春色网 | 555夜色555亚洲夜色 | 欧美系列在线观看 | 悠悠影院欧美日韩国产 | 国产美女精品久久久久中文 | 婷婷丁香激情五月 | 人人干人人干人人干 | 亚洲国产午夜精品理论片的软件 | 五月综合久久 | 最新久久精品 | 日韩欧美色 |