色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    4327

    瀏覽量

    62573
  • OpenCV
    +關注

    關注

    31

    文章

    634

    瀏覽量

    41338

原文標題:經驗 | 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.8w次閱讀
    <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 ?1926次閱讀
    <b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>

    OpenCV色彩空間的轉換函數

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

    OpenCV圖像的計算

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

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

    圖像形態學是圖像處理的分支學科,在二值圖像處理占有重要地位、OpenCV實現了
    的頭像 發表于 05-27 14:11 ?1450次閱讀
    <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 ?1841次閱讀

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

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

    OpenCV圖像識別C++代碼

    的頭文件 在您的C++代碼,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發表于 07-16 10:42 ?1969次閱讀
    主站蜘蛛池模板: 囯产免费精品一品二区三区视频| 18日本人XXXXXX18| 妖精视频免费看| 在线视频网站www色| 97人妻精品全国免费视频| chinese黑人第一次| 国产 交换 丝雨 巅峰| 国产午夜三区视频在线| 久久大香萑太香蕉av| 暖暖日本大全免费观看| 私密按摩师在线观看 百度网盘| 校园男男高h小黄文| 在教室轮流被澡高H林萌| AV精品爆乳纯肉H漫网站| 国产AV精品无码免费看| 國産麻豆AVMDMD0179| 麻豆啊传媒app黄版破解免费 | 久久久久综合| 嫩小性性性xxxxbbbb| 叔叔 电影完整版免费观看韩国| 亚洲精品无码一区二区三区四虎 | 国产亚洲精品看片在线观看| 99视频精品全部免费观看| 黄色三级网站| 做暖暖视频在线看片免费| 免费看成人毛片| 扒开校花粉嫩小泬喷潮漫画| 双性将军粗壮H灌满怀孕| 国产亚洲精品成人AV久久| 97夜夜澡人人爽人人模人人喊| 戳女人屁股流水羞羞漫画| 娇妻让壮男弄的流白浆| 秋霞电影网视频一区二区三区 | 亚洲伊人精品| 啊灬啊灬啊灬快高潮视频| 荷兰少归BVBV| 日本污ww视频网站| 影音先锋av天堂| 国产精彩视频在线| 毛片999| 乌克兰xxxxx|