cv2.resize()函數參數詳解

一、參數介紹

cv2.resize()函數是OpenCV庫中的一種圖像處理函數,用於調整圖像的大小。常用於圖像縮放、裁剪、旋轉、鏡像等操作。在使用該函數時,需要注意以下參數:

1.1 目標大小參數——dsize

dsize是目標圖像的大小,通常採用元組(width, height)表示。可以指定縮放後圖像的大小,也可以使用0參數來根據縮放比例自動計算大小。舉個例子:

# 指定目標大小
img = cv2.imread('image.jpg')
resized_img = cv2.resize(img, (500, 600))

# 指定縮放比例
resized_img = cv2.resize(img, None, fx=0.5, fy=0.5)

1.2 縮放比例參數——fx和fy

fx和fy是橫向和縱向的縮放比例,默認值為1,表示不縮放。若fx為0.5,fy為2,則水平方向縮小一半,垂直方向增大一倍。同樣地,在使用該參數時可以指定目標大小或使用0參數來自動計算大小。

1.3 插值方法參數——interpolation

interpolation表示縮放圖像時的插值方法,常見的有以下三種:

  • cv2.INTER_NEAREST:最近鄰插值。
  • cv2.INTER_LINEAR:雙線性插值(默認選項)。
  • cv2.INTER_CUBIC:雙三次插值。

一些情況下,放大圖像使用INTER_CUBIC會比較好,縮小圖像使用INTER_AREA會比較好。舉個例子:

# 指定插值方法
resized_img1 = cv2.resize(img, (500, 600), interpolation=cv2.INTER_NEAREST)
resized_img2 = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)

1.4 填充方式參數——borderMode

borderMode表示在縮放圖像時所填充的邊緣像素的模式,常見的有以下兩種:

  • cv2.BORDER_CONSTANT:填充常數值。
  • cv2.BORDER_REPLICATE:複製最邊緣像素。

舉個例子,在寬度和高度上各縮放2倍,並且填充邊界像素:

import cv2
import numpy as np

img = cv2.imread('image.jpg')
rows, cols = img.shape[:2]
resized_img = cv2.resize(img, (cols * 2, rows * 2), interpolation=cv2.INTER_CUBIC, borderMode=cv2.BORDER_CONSTANT)

二、圖像縮放

圖像縮放是最常用的cv2.resize()函數操作之一,它的作用是改變圖像的大小。下面我們來看一下cv2.resize()函數如何實現圖像縮放操作。

2.1 按比例縮放

比例縮放是指按照一定的比例縮小或者放大圖片。在使用cv2.resize()函數時,可以使用fx和fy參數分別指定水平方向和垂直方向的比例。比如:傳入fx=0.5,fy=0.5,表示縮小一半。代碼示例如下:

import cv2

img = cv2.imread('image.jpg')
resized_img = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)
cv2.imshow('resized_img', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 按目標尺寸縮放

目標尺寸縮放是指將原圖縮放到指定的目標尺寸。需要注意的是,在指定目標尺寸時,需要使用一個元組(width, height)來表示。比如:傳入(400, 200),表示將目標圖片的寬為400,高為200。代碼示例如下:

import cv2

img = cv2.imread('image.jpg')
resized_img = cv2.resize(img, (400, 200), interpolation=cv2.INTER_CUBIC)
cv2.imshow('resized_img', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.3 按照比例和目標尺寸縮放

有時候我們需要按照一定的比例和指定的目標尺寸來縮放圖片。此時我們可以直接指定fx和fy的值,也可以直接指定目標尺寸的大小。代碼示例如下:

import cv2

img = cv2.imread('image.jpg')
resized_img1 = cv2.resize(img, (400, 200), interpolation=cv2.INTER_CUBIC)
resized_img2 = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)

cv2.imshow('resized_img', resized_img1)
cv2.imshow('resized_img2', resized_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、插值算法

在圖像縮放中,插值算法是一個不可忽略的問題。OpenCV提供了三種插值算法,包括最近鄰插值、雙線性插值和雙三次插值。下面我們會針對這三種插值算法進行詳細介紹。

3.1 最近鄰插值

最近鄰插值的算法非常簡單,就是取周圍點的灰度值來填充當前像素點的值。在圖像縮小的時候,最近鄰插值算法會丟失一些細節。代碼示例如下:

import cv2

img = cv2.imread('image.jpg')
resized_img = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_NEAREST)

cv2.imshow('resized_img', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2 雙線性插值

雙線性插值是一種比較常用的插值算法,在縮小和放大圖像時都會用到。它是基於對兩個方向上的一階導數進行估計來計算一個像素值,而不是簡單地從周圍的像素值中選取一個值。代碼示例如下:

import cv2

img = cv2.imread('image.jpg')
resized_img = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)

cv2.imshow('resized_img', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.3 雙三次插值

雙三次插值是一種複雜的插值算法,如果在縮小圖像時使用的話,會比雙線性插值更加平滑。而在放大圖像時,它比雙線性插值更能保留細節。代碼示例如下:

import cv2

img = cv2.imread('image.jpg')
resized_img = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)

cv2.imshow('resized_img', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、結尾

cv2.resize()函數是一個非常有用的圖像處理函數,在圖像縮放、裁剪、旋轉、鏡像等操作中都有應用。本文詳細介紹了該函數參數的使用方法,並給出了實用的代碼示例。如果有需要對圖像進行縮放等操作的讀者,可以了解該函數的更多使用技巧,從而更好地幫助你解決實際問題。

原創文章,作者:DZEHH,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/317758.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DZEHH的頭像DZEHH
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三星內存條參數用法介紹

    本文將詳細解釋三星內存條上面的各種參數,讓你更好地了解內存條並選擇適合自己的一款。 一、容量大小 容量大小是內存條最基本的參數,一般以GB為單位表示,常見的有2GB、4GB、8GB…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Spring Boot中發GET請求參數的處理

    本文將詳細介紹如何在Spring Boot中處理GET請求參數,並給出完整的代碼示例。 一、Spring Boot的GET請求參數基礎 在Spring Boot中,處理GET請求參…

    編程 2025-04-29

發表回復

登錄後才能評論