天天看點

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測

翻譯自【OpenCV Fast Fourier Transform (FFT) for blur detection in images and video streams】,原文連結:

https://www.pyimagesearch.com/2020/06/15/opencv-fast-fourier-transform-fft-for-blur-detection-in-images-and-video-streams/

本文僅作學習分享。

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測

在本教程中,您将學習如何使用OpenCV和快速傅裡葉變換(FFT)在圖像和實時視流中執行模糊檢測。

今天的教程是我上一篇關于OpenCV模糊檢測的部落格文章的擴充

(https://www.pyimagesearch.com/2015/09/07/blur-detection-with-opencv/)。

原始模糊檢測方法:

  • 依賴于計算圖像Laplacian算子的方差
  • 可以僅用一行代碼實作
  • 使用起來非常簡單

缺點是,Laplacian方法需要大量手動調整用于定義圖像是否模糊的”門檻值“。如果你能控制你的光線條件,環境和圖像捕捉過程,這個方法工作得很好,但如果不是,那你很可能得到雜亂不堪的效果。

我們今天要講的方法依賴于計算圖像的快速傅裡葉變換。它仍然需要一些手動調整,但正如我們将發現的,FFT模糊檢測器比Laplacian方差更加可靠與穩定。

在本教程結束時,你将擁有一個可以應用于圖像和視訊流,且功能齊全的FFT模糊檢測器。

OpenCV快速傅裡葉變換(FFT)模糊檢測

在本教程的第一部分,我們将簡要讨論:

  • 什麼是模糊檢測
  • 為什麼我們想檢測圖像/視訊流中的模糊
  • 快速傅裡葉變換如何讓我們檢測模糊

什麼是模糊檢測,什麼時候我們需要檢測模糊?

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測
圖1:如何使用OpenCV和快速傅裡葉變換(FFT)算法自動檢測照片是否模糊?(圖檔來源:https://www.cs.unm.edu/~brayer/vision/fourier.html)

模糊檢測,顧名思義,是檢測圖像是否模糊的算法。

模糊檢測可能的應用包括:

  • 圖像品質的自動分級
  • 幫助專業攝影師在100到1000張的照片拍攝過程中自動丢棄模糊/低品質的照片
  • 将OCR應用于實時視訊流,但僅對非模糊幀應用昂貴的OCR計算

這裡的關鍵要點是,為在理想條件下捕獲的圖像編寫計算機視覺代碼總是比較容易的。

與其嘗試處理品質非常差的圖像的邊緣情況,不如檢測并丢棄品質差的圖像(比如有明顯模糊的圖像)。

這種模糊檢測程式既可以自動丢棄品質差的圖像,也可以簡單地告訴終端使用者:”嘿,老兄,再試一次,讓我們在這裡捕捉一個更好的畫面”。

請記住,計算機視覺應用程式應該是智能的,是以有了“人工智能”這個術語——有時候,“智能”可以隻是檢測輸入資料的品質是否太差,而不是試圖弄懂它。

什麼是快速傅立葉變換(FFT)?

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測
圖2:在本教程中,我們将使用OpenCV和NumPy的組合在圖像和視流中進行基于快速傅立葉變換(FFT)的模糊檢測。

快速傅裡葉變換是計算離散傅裡葉變換的一種友善的數學算法。它用于将信号從一個域轉換為另一個域。

FFT在許多學科中都很有用,包括音樂、數學、科學和工程。例如,電氣工程師,特别是那些與無線、電源和音頻信号打交道的工程師,需要FFT計算來将時間序列信号轉換到頻域,因為有些計算在頻域更容易進行。相反,使用FFT可以将頻域信号轉換回時域。

在計算機視覺方面,我們通常認為FFT是一種圖像處理工具,它可以将圖檔在兩個圖像域内轉換:

  • 傅裡葉(即頻率)域
  • 空間域

此外,FFT同時用實分量和虛分量來表示圖像。

通過分析這些值,我們可以執行圖像處理程式,如模糊,邊緣檢測,門檻值,紋理分析,以及模糊檢測。

回顧快速傅裡葉變換的數學細節超出了這篇部落格文章的範圍,是以如果你有興趣學習更多關于它的知識,我建議你閱讀這篇關于FFT及其與圖像處理的關系的文章。

https://homepages.inf.ed.ac.uk/rbf/HIPR2/fourier.htm

對于有學術傾向的讀者,可以看看Aaron Bobick在佐治亞理工學院計算機視覺課程上的精彩幻燈片。

https://www.cc.gatech.edu/~afb/classes/CS4495-Fall2014/slides/CS4495-Frequency.pdf

最後,維基百科關于傅裡葉變換的頁面更詳細地介紹了數學,包括它在非圖像處理任務中的應用。

項目結構

首先使用本教程的“下載下傳”部分下載下傳源代碼和示例圖像。一旦你解壓縮檔案,你将有一個目錄組織如下:

$ tree --dirsfirst
.
├── images
│   ├── adrian_01.png
│   ├── adrian_02.png
│   ├── jemma.png
│   └── resume.png
├── pyimagesearch
│   ├── __init__.py
│   └── blur_detector.py
├── blur_detector_image.py
└── blur_detector_video.py
2 directories, 8 files           

複制

我們基于FFT的模糊檢測算法位于blur_detector.py檔案中的pyimagesearch子產品中。内部實作了一個函數detect_blur_fft。

我們在兩個Python驅動程式腳本中使用detect_blur_fft方法:

  • blur_detector_image:對靜态圖像進行模糊檢測。我在images/目錄中為我們提供了一些測試圖像,您也應該在自己的圖像(模糊的和不模糊的)上嘗試這種算法。
  • blur_detector_video。在視訊流中實作實時模糊檢測。

使用OpenCV實作我們的FFT模糊檢測器

現在我們準備用OpenCV實作我們的快速傅裡葉變換模糊檢測器。

我們将要介紹的方法是基于Liu等人在2008年CVPR出版物《圖像部分模糊檢測和分類》中實作的。

http://www.cse.cuhk.edu.hk/leojia/all_final_papers/blur_detect_cvpr08.pdf

在我們的目錄結構中打開blur_detector.py檔案,插入以下代碼:

# import the necessary packages
import matplotlib.pyplot as plt
import numpy as np
def detect_blur_fft(image, size=60, thresh=10, vis=False):
  # grab the dimensions of the image and use the dimensions to
  # derive the center (x, y)-coordinates
  (h, w) = image.shape
  (cX, cY) = (int(w / 2.0), int(h / 2.0))           

複制

我們的模糊檢測器實作需要matplotlib和NumPy。我們将使用内建在NumPy中的快速傅裡葉變換算法作為我們方法的基礎;

第4行定義detect_blur_fft函數,接受四個參數:

  • 圖檔image:我們對模糊檢測輸入圖像
  • 大小size:以圖像中心點為中心的半徑的大小,我們将使FFT偏移為零
  • 門檻值thresh:用于确定圖像是否被認為是模糊的,将與震級的平均值(稍後詳細說明)進行比較的一個值
  • 辨別符vis:一個布爾值,訓示是否使用matplotlib可視化/繪制原始輸入圖像和大小圖像

給定輸入圖像,首先擷取它的尺寸(第7行)并計算中心(x, y)坐标(第8行)。

接下來,我們将使用NumPy的快速傅裡葉變換(FFT)算法實作來計算離散傅裡葉變換(DFT):

# compute the FFT to find the frequency transform, then shift
  # the zero frequency component (i.e., DC component located at
  # the top-left corner) to the center where it will be more
  # easy to analyze
  fft = np.fft.fft2(image)
  fftShift = np.fft.fftshift(fft)           

複制

在這裡,我們使用NumPy的内置算法計算FFT(第5行)。

然後我們将結果的零頻率分量(直流分量)移到中心以便于分析(第6行)。

現在我們已經有了圖像的FFT,如果設定了vis标志,讓我們可視化一下結果:

# check to see if we are visualizing our output
  if vis:
    # compute the magnitude spectrum of the transform
    magnitude = 20 * np.log(np.abs(fftShift))
    # display the original input image
    (fig, ax) = plt.subplots(1, 2, )
    ax[0].imshow(image, cmap="gray")
    ax[0].set_title("Input")
    ax[0].set_xticks([])
    ax[0].set_yticks([])
    # display the magnitude image
    ax[1].imshow(magnitude, cmap="gray")
    ax[1].set_title("Magnitude Spectrum")
    ax[1].set_xticks([])
    ax[1].set_yticks([])
    # show our plots
    plt.show()           

複制

出于調試和好奇的目的,您可能希望通過設定vis=True來繪制輸入圖像的FFT幅度譜。

如果你選擇這樣做,首先我們計算變換的振幅譜(第4行)。

然後,我們将原始輸入圖像繪制在幅度譜圖像旁邊(第6-16行),并顯示結果(第19行)。

現在我們有了可視化振幅譜的方法,讓我們來确定輸入圖像是否模糊:

# zero-out the center of the FFT shift (i.e., remove low
  # frequencies), apply the inverse shift such that the DC
  # component once again becomes the top-left, and then apply
  # the inverse FFT
  fftShift[cY - size:cY + size, cX - size:cX + size] = 0
  fftShift = np.fft.ifftshift(fftShift)
  recon = np.fft.ifft2(fftShift)           

複制

在這裡,我們:

  • 設定我們的FFT移動為0(即,去除低頻率)第5行
  • 應用反向位移将DC元件放回左上角(第6行)
  • 應用逆FFT(第7行)

到此,我們還有三個步驟來确定我們的圖像是否模糊:

# compute the magnitude spectrum of the reconstructed image,
  # then compute the mean of the magnitude values
  magnitude = 20 * np.log(np.abs(recon))
  mean = np.mean(magnitude)
  # the image will be considered "blurry" if the mean value of the
  # magnitudes is less than the threshold value
  return (mean, mean <= thresh           

複制

其餘步驟包括:

  • 在我們已經将中心DC值歸零之後,再次計算重建圖像的幅度值(第3行)。
  • 計算幅度值的平均值(第4行)。
  • 傳回一個2元組的平均值以及一個訓示輸入圖像是否模糊的布爾值(第8行)。檢視代碼,我們可以看到,通過比較平均值和門檻值,我們已經确定了模糊布爾值(判斷圖像是否模糊)。

我們實作了一個基于fft的模糊檢測算法。但還沒有完成。在下一節中,我們将對靜态圖像應用我們的算法,以確定它按照我們的期望執行。

用FFT檢測圖像中的模糊

現在我們的detect_blur_fft 輔助函數已經實作,讓我們通過建立一個Python驅動程式腳本來使用它,該腳本從磁盤加載一個輸入圖像,然後對其應用FFT模糊檢測。

打開一個新檔案,命名為detect_blur_image.py,并插入以下代碼:

# import the necessary packages
from pyimagesearch.blur_detector import detect_blur_fft
import numpy as np
import argparse
import imutils
import cv2
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str, required=True,
  help="path input image that we'll detect blur in")
ap.add_argument("-t", "--thresh", type=int, default=20,
  help="threshold for our blur detector to fire")
ap.add_argument("-v", "--vis", type=int, default=-1,
  help="whether or not we are visualizing intermediary steps")
ap.add_argument("-d", "--test", type=int, default=-1,
  help="whether or not we should progressively blur the image")
args = vars(ap.parse_args())           

複制

第2-6行進行導入,特别的是,我們需要導入我們在上一節中實作的detect_blur_fft函數。

從這裡,我們解析四個指令行參數:

  • --image:用于模糊檢測的輸入圖像的路徑。
  • --thresh:我們的模糊檢測器計算門檻值。
  • --vis:我們的标志符,訓示是否将輸入圖像的幅度值圖像可視化。
  • --test:為了測試,我們可以逐漸模糊輸入圖像,并對每個示例進行基于fft的模糊檢測;此标志訓示我們是否将執行此測試。

--image、--thresh和--vis參數分别對應于我們在上一節實作的detect_blur_fft函數的image、thresh和vis參數。

讓我們繼續,加載我們的輸入圖像,執行快速傅裡葉變換模糊檢測:

# load the input image from disk, resize it, and convert it to
# grayscale
orig = cv2.imread(args["image"])
orig = imutils.resize(orig, width=500)
gray = cv2.cvtColor(orig, cv2.COLOR_BGR2GRAY)
# apply our blur detector using the FFT
(mean, blurry) = detect_blur_fft(gray, size=60,
  thresh=args["thresh"], vis=args["vis"] > 0)           

複制

進行FFT模糊檢測,我們:

  • 加載輸入圖像--image,并将其轉換為灰階(第3-5行)
  • 使用detect_blur_fft函數應用我們的FFT模糊檢測器(第7和8行)

接下來,我們将注釋并顯示我們的圖像:

# draw on the image, indicating whether or not it is blurry
image = np.dstack([gray] * 3)
color = (0, 0, 255) if blurry else (0, 255, 0)
text = "Blurry ({:.4f})" if blurry else "Not Blurry ({:.4f})"
text = text.format(mean)
cv2.putText(image, text, (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7,
  color, 2)
print("[INFO] {}".format(text))
# show the output image
cv2.imshow("Output", image)
cv2.waitKey(0)           

複制

在這裡,我們:

  • 向我們的單通道灰階圖像添加兩個通道,将結果存儲在圖像中(第2行)
  • 通過第32行将顔色設定為紅色(如果模糊)和綠色(如果不模糊)
  • 在圖像的左上角繪制模糊的文本訓示和平均值(第4-7行),并在終端中列印相同的資訊(第37行)
  • 顯示輸出圖像,直到按下一個鍵為止(第11和12行)

至此,我們已經完成了确定輸入圖像是否模糊的目标。

我們可以就此打住。但是為了更嚴格地測試我們的算法,讓我們實作一個健壯的方法來測試我們的圖像在不同層次上的模糊:

# check to see if are going to test our FFT blurriness detector using
# various sizes of a Gaussian kernel
if args["test"] > 0:
  # loop over various blur radii
  for radius in range(1, 30, 2):
    # clone the original grayscale image
    image = gray.copy()
    # check to see if the kernel radius is greater than zero
    if radius > 0:
      # blur the input image by the supplied radius using a
      # Gaussian kernel
      image = cv2.GaussianBlur(image, (radius, radius), 0)
      # apply our blur detector using the FFT
      (mean, blurry) = detect_blur_fft(image, size=60,
        thresh=args["thresh"], vis=args["vis"] > 0)
      # draw on the image, indicating whether or not it is
      # blurry
      image = np.dstack([image] * 3)
      color = (0, 0, 255) if blurry else (0, 255, 0)
      text = "Blurry ({:.4f})" if blurry else "Not Blurry ({:.4f})"
      text = text.format(mean)
      cv2.putText(image, text, (10, 25), cv2.FONT_HERSHEY_SIMPLEX,
        0.7, color, 2)
      print("[INFO] Kernel: {}, Result: {}".format(radius, text))
    # show the image
    cv2.imshow("Test Image", image)
    cv2.waitKey(0)           

複制

當設定了--test标志時,我們将進入從第3行開始的條件塊。第3-31行代碼完成了以下工作:

  • 在逐漸增加的半徑範圍内對我們的灰階圖像應用高斯模糊
  • 對每個人為模糊的圖像進行快速的基于傅裡葉變換的模糊檢測
  • 注釋并顯示結果

為了完成我們的測試特性,第5行開始在[0,30]範圍内的所有奇數半徑上進行循環。從這裡開始,第13行應用OpenCV的GaussianBlur方法有意地在我們的圖像中引入模糊。

其他的都是一樣的,包括模糊檢測算法和注釋步驟。您可以通過在螢幕上按一個鍵來循環測試結果圖像,直到模糊半徑在該範圍内耗盡。

當然,我們測試例程的目的是讓我們能夠有效地感受和調整模糊門檻值參數(—thresh)。

FFT模糊檢測在圖像結果

現在我們準備使用OpenCV和快速傅裡葉變換來檢測圖像中的模糊。

首先,請確定使用本教程的“下載下傳”部分下載下傳源代碼和示例圖像。

然後打開終端,執行以下指令:

$ python blur_detector_image.py --image images/adrian_01.png
[INFO] Not Blurry (42.4630)           

複制

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測
圖3:結合快速傅裡葉變換(FFT)算法,使用Python和OpenCV來确定照片是否模糊

這裡你可以看到我在錫安國家公園的地鐵徒步旅行的輸入圖像-圖像被正确地标記為不模糊。

讓我們試試另一張圖檔,這是我家的狗,Jemma:

$ python blur_detector_image.py --image images/jemma.png
[INFO] Blurry (12.4738)           

複制

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測
圖4:基于Python、OpenCV和NumPy的快速傅裡葉變換(FFT)模糊檢測算法已經自動判定Janie的這張圖像模糊。

這幅圖像有明顯的模糊,是以被标記為模糊。

為了了解當圖像變得越來越模糊時,FFT的平均幅度值是如何變化的,讓我們提供——test指令行參數:

$ python blur_detector_image.py --image images/adrian_02.png --test 1
[INFO] Not Blurry (32.0934)
[INFO] Kernel: 1, Result: Not Blurry (32.0934)
[INFO] Kernel: 3, Result: Not Blurry (25.1770)
[INFO] Kernel: 5, Result: Not Blurry (20.5668)
[INFO] Kernel: 7, Result: Blurry (13.4830)
[INFO] Kernel: 9, Result: Blurry (7.8893)
[INFO] Kernel: 11, Result: Blurry (0.6506)
[INFO] Kernel: 13, Result: Blurry (-5.3609)
[INFO] Kernel: 15, Result: Blurry (-11.4612)
[INFO] Kernel: 17, Result: Blurry (-17.0109)
[INFO] Kernel: 19, Result: Blurry (-19.6464)
[INFO] Kernel: 21, Result: Blurry (-20.4758)
[INFO] Kernel: 23, Result: Blurry (-20.7365)
[INFO] Kernel: 25, Result: Blurry (-20.9362)
[INFO] Kernel: 27, Result: Blurry (-21.1911)
[INFO] Kernel: 29, Result: Blurry (-21.3853)           

複制

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測
圖5:使用Python模糊檢測器腳本的——測試例程,我們應用了一系列有意的模糊以及快速傅裡葉變換(FFT)方法來确定圖像是否模糊。這個測試例程非常有用,因為它允許您調優模糊門檻值參數。

在這裡,你可以看到,當我們的圖像變得越來越模糊,FFT的平均幅度值下降。

我們的FFT模糊檢測方法也适用于非自然場景圖像。

例如,假設我們想要建構一個自動文檔掃描器應用程式——這樣的計算機視覺項目應該會自動拒絕模糊圖像。

然而,文檔圖像與自然場景圖像有很大的不同,從本質上來說,文檔圖像對模糊更加敏感。

任何類型的模糊都會嚴重影響OCR的精度。

是以,我們應該增加我們的——thresh值(我還将使用——vis參數,以便我們可以可視化FFT幅度值的變化):

$ python blur_detector_image.py --image images/resume.png --thresh 27 --test 1 --vis 1
[INFO] Not Blurry (34.6735)
[INFO] Kernel: 1, Result: Not Blurry (34.6735)
[INFO] Kernel: 3, Result: Not Blurry (29.2539)
[INFO] Kernel: 5, Result: Blurry (26.2893)
[INFO] Kernel: 7, Result: Blurry (21.7390)
[INFO] Kernel: 9, Result: Blurry (18.3632)
[INFO] Kernel: 11, Result: Blurry (12.7235)
[INFO] Kernel: 13, Result: Blurry (9.1489)
[INFO] Kernel: 15, Result: Blurry (2.3377)
[INFO] Kernel: 17, Result: Blurry (-2.6372)
[INFO] Kernel: 19, Result: Blurry (-9.1908)
[INFO] Kernel: 21, Result: Blurry (-15.9808)
[INFO] Kernel: 23, Result: Blurry (-20.6240)
[INFO] Kernel: 25, Result: Blurry (-29.7478)
[INFO] Kernel: 27, Result: Blurry (-29.0728)
[INFO] Kernel: 29, Result: Blurry (-37.7561)           

複制

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測
圖6:OpenCV快速傅裡葉變換(FFT)用于圖像和視視訊中的模糊檢測,可以判斷履歷等文檔是否模糊。

在這裡,您可以看到我們的圖像很快變得模糊和不可讀,正如輸出所示,我們的OpenCV FFT模糊檢測器正确地将這些圖像标記為模糊。

下面是一個可視化的快速傅裡葉變換幅度值,圖像變得越來越模糊:

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測
圖7:當圖像變得越來越模糊時,我們可以看到幅度譜可視化的變化。本教程使用OpenCV和NumPy在圖像和視流中執行快速傅裡葉變換(FFT)模糊檢測。

利用OpenCV和FFT檢測視訊中的模糊

到目前為止,我們已經對圖像應用了快速傅裡葉變換模糊檢測器。

但是有可能将FFT模糊檢測應用到視訊流嗎?

整個過程也能實時完成嗎?

打開一個新檔案,命名為blur_detector_video.py,并插入以下代碼:

# import the necessary packages
from imutils.video import VideoStream
from pyimagesearch.blur_detector import detect_blur_fft
import argparse
import imutils
import time
import cv2
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-t", "--thresh", type=int, default=10,
  help="threshold for our blur detector to fire")
args = vars(ap.parse_args())           

複制

我們從導入開始,特别是我們的VideoStream類和detect_blur_fft函數。

對于這個Python腳本,我們隻有一個指令行參數:FFT模糊檢測的門檻值(——thresh)。

從這裡,我們準備初始化我們的視訊流,并開始循環從我們的攝像頭的幀:

# initialize the video stream and allow the camera sensor to warm up
print("[INFO] starting video stream...")
vs = VideoStream(src=0).start()
time.sleep(2.0)
# loop over the frames from the video stream
while True:
  # grab the frame from the threaded video stream and resize it
  # to have a maximum width of 400 pixels
  frame = vs.read()
  frame = imutils.resize(frame, width=500)
  # convert the frame to grayscale and detect blur in it
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  (mean, blurry) = detect_blur_fft(gray, size=60,
    thresh=args["thresh"], vis=False)           

複制

第3行和第4行初始化了我們的攝像頭圖像流,并允許相機有時間預熱。

從這裡開始,我們在第7行開始幀處理循環。在内部,我們抓取一幀并将其轉換為灰階(第10-14行),就像在我們的單一圖像模糊檢測腳本。

然後,第15和16行應用我們的快速傅裡葉變換模糊檢測算法,同時傳遞我們的灰色架構和——thresh指令行參數。我們不會把幅度譜的表示形象化,是以vis=False。

接下來,我們将處理這個特定幀的結果:

# draw on the frame, indicating whether or not it is blurry
  color = (0, 0, 255) if blurry else (0, 255, 0)
  text = "Blurry ({:.4f})" if blurry else "Not Blurry ({:.4f})"
  text = text.format(mean)
  cv2.putText(frame, text, (10, 25), cv2.FONT_HERSHEY_SIMPLEX,
    0.7, color, 2)
  # show the output frame
  cv2.imshow("Frame", frame)
  key = cv2.waitKey(1) & 0xFF
  # if the `q` key was pressed, break from the loop
  if key == ord("q"):
    break
# do a bit of cleanup
cv2.destroyAllWindows()
vs.stop()           

複制

最後一個代碼塊此時看起來應該非常熟悉,因為這是我們第三次看到這些代碼行了。我們在這裡:

  • 注釋模糊(紅色文本)或不模糊(綠色文本)以及平均值(第2-6行)
  • 顯示結果(第9行)
  • 如果按下q鍵就退出(第10-14行),并執行家務清理(第17和18行)

快速傅裡葉變換視訊模糊檢測結果

我們現在準備看看我們的OpenCV FFT模糊檢測器是否可以應用于實時視訊流。

請確定使用本教程的“下載下傳”部分下載下傳源代碼。

然後打開終端,執行以下指令:

$ python blur_detector_video.py
[INFO] starting video stream...           

複制

OpenCV快速傅裡葉變換(FFT)用于圖像和視訊流的模糊檢測

當我移動我的筆記本電腦,運動模糊被引入幀。

如果我們要實作一個計算機視覺系統來自動提取關鍵、重要的幀,或者建立一個自動的視訊OCR系統,我們會想要丢棄這些模糊的幀——使用我們的OpenCV FFT模糊檢測器,我們可以做到這一點!

THE END

今天就到這裡啦。