<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這個系列是我第一個想要更下去的系列。每篇會全面介紹一個 OpenCV 函數,會給出 API 和範例。範例主要是用 Python 去寫,但是 OpenCV 的原生語言是 C++,所以想翻譯過去其實很簡單。介紹過程中如果有相關的 CV 知識也會一併寫入,還是那句話,爭取做到說人話,讓小白也能看得懂。
API 來自 OpenCV官方檔案
C++
void cv::resize(InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR )
Python
dst = cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
顧名思義,這個函數可以把圖片縮放到你想要的大小。
在這裡我們主要說 Python 的引數。把各個引數的含義和相關資訊打一張表:
引數 | 型別 | 是否必須指定 | 具體含義 |
---|---|---|---|
src | numpy.ndarray | 是 | 原影象 |
dsize | tuple<int> | 是 | 縮放後的影象大小 |
dst | 無所謂 | 否 | 目標影象,但是在 Python 裡面沒有任何意義。一般不傳參或者設成 None |
fx , fy | 數值型別 | 否 | x 和 y 方向上的縮放比例 |
interpolation | int | 否 | 插值方式表示程式碼,本質是一個 int 數值,一般用 OpenCV 內建的引數代號以提高可讀性。 |
看這張表想必大家就很清楚了。
那麼,想要實現縮放影象,有兩種方法。第一種方法是指定縮放後的影象大小。下面是實現這個功能的一個簡單的程式。後面的給出的其他程式都是對 resize
所在行進行的改動。
import numpy as np import cv2 as cv img = cv.imread("你希望縮放的圖片") # 縮放影象,後面的其他程式都是在這一行上改動 dst = cv.resize(img, (400, 300)) # 顯示影象 cv.imshow("dst: %d x %d" % (dst.shape[0], dst.shape[1]), dst) cv.waitKey(0) cv.destroyAllWindows()
在這個例子中,我們指定了縮放後影象的大小為 400 x 300
,resize
函數就會將影象拉伸到這個大小,拉伸後的影象相比於原圖不會有任何的裁剪。
另一種方法,就是利用後面的 fx
和 fy
,指定縮放後影象長寬相對於原圖的比例。如果利用這兩個引數,前面的 dsize
要寫成一個不合法的形式(比如:(0, 0)
)。具體原因後面會解釋。
注意,在 dsize
和 fx
中間其實隔了一個無用的 dst
,雖然沒有實際作用,但是這個引數確實存在,按照 Python 的函數傳參規則,要麼指明實參傳遞給哪個形參,要麼按順序傳參不能遺漏。具體看下面的例子,兩行的效果一致,都是將影象橫向縮放為原來的 0.5 倍,縱向縮放為原來的 0.3 倍。
# 形參預設 dst = cv.resize(img, (0, 0), None, 0.5, 0.3) # 指明形參 dst = cv.resize(img, (0, 0), fx=0.5, fy=0.3)
值得注意的是,縮放後的影象寬高是根據 round(img.shape[0] * fx)
和 round(img.shape[1] * fy)
來計算的,所以即使 fx
和 fy
並不是0,只要這兩個計算結果中有一個是 0,也會報錯。
OpenCV 會先檢查 dsize
是否合法,即影象的寬和高是否都是非 0 的。如果是,就按照這個縮放,忽略後面的 fx
和 fy
;如果不是,就按照 fx
,fy
來計算。即優先順序: dsize
> fx
fy
.
另外,兩種方式是獨立定義的,也就是不能混著,用數值指定長卻用比率指定寬。不存在 cv.resize(img, (0, 400), fx=0.42)
這種用法!
最後一個引數,在 resize
函數裡有 7 種可能取值,參考OpenCV檔案相關頁。但是我這裡第 7 個引數是不存在的,或許是版本問題?最後兩個引數我試過,會報錯,不行。
雖然這些引數非常龐雜,但他們的插值效果卻差不多,一般情況下,預設的線性插值就夠用。如果非要給點建議的話,我翻譯一下官網方檔案的原話:
要縮小圖片,一般來說最好的插值方法是 cv.INTER_AREA
,而要放大一張圖片的話,一般來說效果最好的是 cv.INTER_CUBIC
(速度慢)或者 cv.INTER_LINEAR
(速度快一些但結果仍然不錯)。
OpenCV 為縮放影象的大小提供了其他的選擇,這裡說兩個函數:cv.pyrUp
和cv.pyrDown
。
這兩個函數可以用於構建影象金字塔,pyrUp
可以將影象長寬均放大為原來的 2 倍,而 pyrDown
則可以將影象長寬縮小為原來的 1/2. 與 resize
不同的是,這兩個函數和高斯折積核緊密相關。pyrUp
是對影象升取樣,隔行隔列插入零向量之後用高斯核折積,而 pyrDown
則是對影象高斯折積後隔行隔列取樣。兩個的折積核成倍數關係,前者是後者的4倍。
到此這篇關於OpenCV影象縮放之cv.resize()函數詳解的文章就介紹到這了,更多相關OpenCV影象縮放cv.resize()函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45