日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用Python和OpenCV构建图像金字塔

發布時間:2023/11/27 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Python和OpenCV构建图像金字塔 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Python和OpenCV的圖像金字塔

    • 1. 效果圖
    • 2. 什么是圖像金字塔?
    • 3. 依賴
    • 4. 源碼
    • 參考

這篇博客將介紹如何使用兩種方法構造圖像金字塔。

  1. 使用Python和OpenCV構建金字塔,此方法不會在金字塔的每一層使用高斯平滑圖像,因此更適合與HOG描述符一起使用。

  2. 使用Python + scikit-image構建金字塔,在金字塔的每一層都應用高斯平滑。

應該使用哪種方法?——取決于應用程序。如果將HOG描述符用于對象分類,則使用第一種方法,因為平滑會損害分類性能。

如果要實施SIFT或高斯差分關鍵點檢測器之類的方法,則使用第二種方法(或至少將平滑方法納入第一種方法)。

1. 效果圖

法一:未進行高斯平滑的金字塔效果圖:

使用高斯平滑的圖像金字塔效果圖如下:可能因為scikit-image版本 0.17.1原因,不支持彩色圖~~
可以看到高斯平滑的金字塔比不使用高斯平滑的級別少,這是因為高斯平滑的以1/2層級降,更快;

當設置不同的scale級別時,倆種方式能生成的級別也不一致,可以盡情試試。

2. 什么是圖像金字塔?


如上圖所示,圖像金字塔”是圖像的多尺度表示。最下面的圖擁有原始的圖像寬度、高度,每上一層,圖像的寬度與高度分別為之前的一半,并且進行了高斯平滑模糊等操作。

利用圖像金字塔,可以在圖像的不同比例下找到圖像中的對象。當與滑動窗口結合使用時,可以在各個位置的圖像中找到對象。

在金字塔的底部是原始圖像的原始大小(寬度和高度)。并在每個隨后的層上調整圖像大小(二次采樣)并可選地平滑(通常通過高斯模糊)。

逐步對圖像進行二次采樣,直到滿足某個停止標準為止,該標準通常已達到最小尺寸,并且無需進行進一步的二次采樣。

通常,性能和生成的層數之間需要權衡。比例因子越小,則需要創建和處理的圖層就越多-但這也使圖像分類器有更好的機會定位要在圖像中檢測的對象。

較大的比例因子將產生較少的圖層,并且可能會損害對象的分類性能。但是,由于要處理的層數較少,因此可以獲得更高的性能。

3. 依賴

  • imutils
  • scikit-image 安裝可參考

4. 源碼

# 圖像金字塔的倆種方法
# USAGE
#  python pyramid.py --image images/_L3A4387.jpg --scale 1.5# 導入必要的包
import argparse
import imutils
import cv2from skimage.transform import pyramid_gaussian  # 導入scikit圖像pyramid_gaussian函數# 構建金字塔
# - minSize 圖層所需的最小寬度和高度
def pyramid(image, scale=1.5, minSize=(30, 30)):# 產生原始圖像yield image# 保持循環金字塔模式while True:# 計算圖像新的規模大小,并保留寬高比的縮放圖像w = int(image.shape[1] / scale)image = imutils.resize(image, width=w)# 如果金字塔中的圖像低于此最小尺寸,將不再構建圖像金字塔# 停止循環if image.shape[0] < minSize[1] or image.shape[1] < minSize[0]:break# 產生金字塔的下一張圖像yield image# 構建命令行參數及解析
# --image 原始圖像路徑
# --scale 控制在金字塔中調整圖像大小的比例因子
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
ap.add_argument("-s", "--scale", type=float, default=1.5, help="scale factor size")
args = vars(ap.parse_args())# 加載圖像
image = cv2.imread(args["image"])
image = imutils.resize(image, width=800)# 法一: 不平滑,只是縮放圖像
# 遍歷圖像金字塔
for (i, resized) in enumerate(pyramid(image, scale=args["scale"])):# 展示金字塔圖像結果cv2.imshow("Layer {}".format(i + 1), resized)cv2.waitKey(0)
# 關閉所有打開的窗口
cv2.destroyAllWindows()# 法二: 縮放+高斯平滑
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
for (i, resized) in enumerate(pyramid_gaussian(image, downscale=2)):# 如果圖像太小,則停止縮放if resized.shape[0] < 30 or resized.shape[1] < 30:break# 展示金字塔圖像結果cv2.imshow("pyramid_gaussian Layer {}".format(i + 1), resized)cv2.waitKey(0)

參考

  • https://www.pyimagesearch.com/2015/03/16/image-pyramids-with-python-and-opencv/

總結

以上是生活随笔為你收集整理的使用Python和OpenCV构建图像金字塔的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。