<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何使用python和opencv4實現(xiàn)照片長曝光效果呢?

          共 3865字,需瀏覽 8分鐘

           ·

          2021-07-18 22:18

          編輯:王抒偉

          我最喜歡的攝影技術之一是長時間曝光,即制作照片以顯示經(jīng)過時間的效果的過程,而傳統(tǒng)攝影無法捕捉到這種效果。

          應用此技術時,水變得如絲般柔滑,夜空中的星星隨著地球旋轉(zhuǎn)留下光跡,汽車前燈/尾燈以連續(xù)運動的單個波段照亮高速公路。

          長時間曝光是一種很棒的技術,但是要捕獲這些類型的照片,您需要采取系統(tǒng)的方法:將相機安裝在三腳架上,應用各種濾鏡,計算曝光值等。更不用說,您需要熟練的攝影師!

          可是手機沒有此功能呢?自己不會呢?
          哈哈,有一種方法可以通過應用圖像/幀平均來模擬長時間曝光。通過對給定時間段內(nèi)從安裝的攝像機捕獲的圖像求平均,我們可以(實際上)模擬長時間曝光。

          并且由于視頻只是一系列圖像,因此我們可以通過將視頻中的所有幀平均在一起,輕松地從幀中構(gòu)建長時間曝光。結(jié)果是令人驚嘆的長曝光式圖像,就像文章開頭的圖像一樣。


          這篇博客文章分為三個部分。

          第一部分,如何通過幀平均來模擬長時間曝光?

          通過圖像/幀平均模擬長時間曝光

          實際上,如果您瀏覽流行的攝影網(wǎng)站,則會發(fā)現(xiàn)有關如何使用相機和三腳架手動創(chuàng)建這些類型的效果的教程(可以在此處找到此類教程的一個很好的示例)。

          我們今天的目標是簡單地實現(xiàn)這種方法,以便我們可以使用Python和OpenCV從輸入視頻中自動創(chuàng)建長時間曝光的圖像。
          給定輸入視頻,我們將所有幀平均在一起(平均加權(quán))以創(chuàng)建長時間曝光效果。

          注意:您也可以使用多張圖像來創(chuàng)建這種長時間曝光效果,但是由于視頻只是一連串圖像,因此使用視頻來演示此技術會更容易。

          第二部分,編寫Python和OpenCV代碼

          使用OpenCV進行長時間曝光仿真

          首先打開一個名為long_exposure.py ,并插入以下代碼

          # import the necessary packagesimport argparseimport imutilsimport cv2# construct the argument parse and parse the argumentsap = argparse.ArgumentParser()ap.add_argument("-v", "--video", required=True,  help="path to input video file")ap.add_argument("-o", "--output", required=True,  help="path to output 'long exposure'")args = vars(ap.parse_args())

          2-4行:導入需要的imutils和OpenCV庫。
          如果沒有使用以下命令安裝即可。

           pip install --upgrade imutils

          我們在第7-12行解析兩個命令行參數(shù)

          --video  # 視頻文件的路徑--output # 輸出“長時間曝光”文件的路徑+文件名

          然后做些初始化步驟:

          # initialize the Red, Green, and Blue channel averages, along with# the total number of frames read from the file(rAvg, gAvg, bAvg) = (None, None, None)total = 0# open a pointer to the video fileprint("[INFO] opening video file pointer...")stream = cv2.VideoCapture(args["video"])print("[INFO] computing frame averages (this will take awhile)...")

          在  第16行,我們初始化RGB通道平均值,然后將其合并為最終的長時間曝光圖像
          我們還初始化第17行的幀總數(shù)計數(shù)  。
          我們正在處理包含所有幀的視頻文件,因此有必要打開指向視頻捕獲的文件指針  stream。

          然后計算平均值:

          # loop over frames from the video file streamwhile True:  # grab the frame from the file stream  (grabbed, frame) = stream.read()  # if the frame was not grabbed, then we have reached the end of  # the sfile  if not grabbed:    break  # otherwise, split the frmae into its respective channels  (B, G, R) = cv2.split(frame.astype("float"))

          我們將從第27行獲取幀,然后將幀分向其各自的BGR通道(第35行)
          如果讀到了視頻文件的末尾,跳出循環(huán)即可。

          在循環(huán)的其余部分,我們將移動計算平均值:

            # if the frame averages are None, initialize them  if rAvg is None:    rAvg = R    bAvg = B    gAvg = G  # otherwise, compute the weighted average between the history of  # frames and the current frames  else:    rAvg = ((total * rAvg) + (1 * R)) / (total + 1.0)    gAvg = ((total * gAvg) + (1 * G)) / (total + 1.0)    bAvg = ((total * bAvg) + (1 * B)) / (total + 1.0)  # increment the total number of frames read thus far  total += 1

          如果是第一次迭代,則將初始RGB平均值設置為第38-41行上獲取的相應第一幀通道 。
          否則,我們將在第45-48行計算每個通道的運行平均值 。
          我們將計算結(jié)果存儲在相應的RGB通道平均數(shù)組中。
          最后,我們增加幀的總數(shù),使我們能夠保持運行平均值(第51行)
          遍歷視頻文件中的所有幀后,我們可以將(平均)通道合并為一個圖像并將其寫入磁盤:

          # merge the RGB averages together and write the output image to diskavg = cv2.merge([bAvg, gAvg, rAvg]).astype("uint8")cv2.imwrite(args["output"], avg)# do a bit of cleanup on the file pointerstream.release()

          在  第54行,我們利用了cv2.merge  函數(shù),同時在列表中指定我們的每個頻道平均值。
          并將像素轉(zhuǎn)換為[0-255]范圍內(nèi)的整數(shù)。
          由于處理視頻文件需要花費大量CPU時間,因此我們只是將圖像保存到磁盤上。
          該腳本的最后一步,釋放視頻流(第58行)。

          第三部分,應用示例

          長時間曝光結(jié)果

          請注意,每個視頻都是通過安裝在三腳架上的攝像機捕獲的,以確保穩(wěn)定性。

          幀示例:

          要創(chuàng)建長時間曝光效果,只需執(zhí)行以下命令

          $ time python long_exposure.py --video videos/river_01.mov --output river_01.png [INFO] opening video file pointer...[INFO] computing frame averages (this will take awhile)...real  2m1.710suser  0m50.959ssys    0m40.207s

          請注意,由于平均過程,水是如何混合成柔滑形式的

          讓我們繼續(xù)看河的第二個例子,下面顯示的是蒙太奇的幀

          請注意,靜止的巖石如何保持不變,但是將涌水平均化為連續(xù)的薄片,從而模仿了長時間的暴露效果。

          這最后一個例子是我最喜歡的水的顏色是驚人的,給予水本身和森林之間形成了鮮明對比

          使用OpenCV進行長時間曝光時,它會給輸出帶來超現(xiàn)實的,夢幻般的感覺

          在今天的博客文章中,我們學習了如何使用OpenCV和圖像處理技術來模擬長時間曝光的圖像。

          為了模擬長時間曝光,我們應用了幀平均,即將一組圖像平均在一起的過程。我們假設輸入的圖像/視頻是使用安裝的攝像機捕獲的(否則生成的輸出圖像會失真),雖然這不是真正的“長時間曝光”,但效果(在視覺上)非常相似。



          瀏覽 112
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天拍夜夜添 | 全国高清无码在线观看 | 大香蕉伊人在线精品 | 欧美大码一区二区免费看 | 日韩和欧美的一区二区 |