国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCV-Python中的圖像處理-視頻分析

這篇具有很好參考價值的文章主要介紹了OpenCV-Python中的圖像處理-視頻分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

視頻分析

學習使用 Meanshift 和 Camshift 算法在視頻中找到并跟蹤目標對象:

Meanshift算法

Meanshift 算法的基本原理是和很簡單的。假設我們有一堆點(比如直方
圖反向投影得到的點),和一個小的圓形窗口,我們要完成的任務就是將這個窗
口移動到最大灰度密度處(或者是點最多的地方)。如下圖所示:
OpenCV-Python中的圖像處理-視頻分析,OpenCV Python,python,opencv,圖像處理
初始窗口是藍色的“C1”,它的圓心為藍色方框“C1_o”,而窗口中所有點質心卻是“C1_r”(小的藍色圓圈),很明顯圓心和點的質心沒有重合。所以移動圓心 C1_o 到質心 C1_r,這樣我們就得到了一個新的窗口。這時又可以找到新窗口內所有點的質心,大多數情況下還是不重合的,所以重復上面的操作:將新窗口的中心移動到新的質心。就這樣不停的迭代操作直到窗口的中心和其所包含點的質心重合為止(或者有一點小誤差)。按照這樣的操作我們的窗口最終會落在像素值(和)最大的地方。如上圖所示“C2”是窗口的最后位址,我們可以看出來這個窗口中的像素點最多。
要在 OpenCV 中使用 Meanshift 算法首先我們要對目標對象進行設置,
計算目標對象的直方圖,這樣在執(zhí)行 meanshift 算法時我們就可以將目標對
象反向投影到每一幀中去了。另外我們還需要提供窗口的起始位置。在這里我
們值計算 H( Hue)通道的直方圖,同樣為了避免低亮度造成的影響,我們使
用函數 cv2.inRange() 將低亮度的值忽略掉。

import numpy as np
import cv2
from matplotlib import pyplot as plt
# 視頻下載地址https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic_small.mp4
cap = cv2.VideoCapture('./resource/opencv/video/slow_traffic_small.mp4')

ret,frame = cap.read()

# setup initial location of window
x, y, w, h = 300, 200, 100, 50 # simply hardcoded the values
track_window = (x, y, w, h)

# set up the ROI for tracking
roi = frame[y:y+h, x:x+w]

hsv_roi = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
roi_hist = cv2.calcHist([hsv_roi],[0],mask,[180],[0,180])
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)

term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1)

while(1):
    ret, frame = cap.read()
    if ret == True:
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        dst = cv2.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)

        ret, track_window = cv2.meanShift(dst, track_window, term_crit)

        x,y,w,h = track_window
        img2 = cv2.rectangle(frame, (x,y), (x+w, y+h), 255, 2)

        k = cv2.waitKey(60)&0xFF
        if k == 27:
            break
        else:
            cv2.imshow('img', img2)
    else:
        break

cap.release()
cv2.destroyAllWindows()

OpenCV-Python中的圖像處理-視頻分析,OpenCV Python,python,opencv,圖像處理
OpenCV-Python中的圖像處理-視頻分析,OpenCV Python,python,opencv,圖像處理

Camshift算法

與 Meanshift 基本一樣,但是返回的結果是一個帶旋轉角度的矩形以及這個矩形的參數(被用到下一次迭代過程中)。

import numpy as np
import cv2
from matplotlib import pyplot as plt
# 視頻下載地址https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic_small.mp4
cap = cv2.VideoCapture('./resource/opencv/video/slow_traffic_small.mp4')

# take first frame of the video
ret, frame = cap.read()

# setup initial location of window
x, y, w, h = 300, 200, 100, 50 # simply hardcoded the values
track_window = (x, y, w, h)
# set up the ROI for tracking
roi = frame[y:y+h, x:x+w]
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
roi_hist = cv2.calcHist([hsv_roi],[0],mask,[180],[0,180])
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)
# Setup the termination criteria, either 10 iteration or move by at least 1 pt
term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )

while(1):
    ret, frame = cap.read()
    if ret == True:
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        dst = cv2.calcBackProject([hsv],[0],roi_hist,[0,180],1)
        # apply camshift to get the new location
        ret, track_window = cv2.CamShift(dst, track_window, term_crit)
        # Draw it on image
        pts = cv2.boxPoints(ret)
        pts = np.int0(pts)
        img2 = cv2.polylines(frame,[pts],True, 255,2)
        k = cv2.waitKey(30) & 0xff
        if k == 27:
            break
        else:
            cv2.imshow('img2',img2)
    else:
        cap.release()
        cv2.destroyAllWindows()

OpenCV-Python中的圖像處理-視頻分析,OpenCV Python,python,opencv,圖像處理
OpenCV-Python中的圖像處理-視頻分析,OpenCV Python,python,opencv,圖像處理

光流

Lucas-Kanade Optical Flow

  • 光流的概念以及 Lucas-Kanade 光流法
  • 函數 cv2.calcOpticalFlowPyrLK() 對圖像中的特征點進行跟蹤
import numpy as np
import cv2

cap = cv2.VideoCapture('./resource/opencv/video/slow_traffic_small.mp4')

# params for Shi-Tomasi corner detection
feature_params = dict(maxCorners = 100,
                    qualityLevel = 0.3,
                    minDistance = 7,
                    blockSize = 7)

# parameters for lucas kanade optical flow
# maxLevel 為使用的圖像金字塔層數
lk_params = dict(winSize = (15,15),
                maxLevel = 2,
                criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
# Create some random colors
color = np.random.randint(0, 255, (100, 3))

# Take first frame and find corners in it
ret, old_frame = cap.read()
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)
p0 = cv2.goodFeaturesToTrack(old_gray, mask=None, **feature_params)

# Create a mask image for drawing purposes
mask = np.zeros_like(old_frame)

while(1):
    ret, frame = cap.read()
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # calculate optical flow 能夠獲取點的新位置
    p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)

    # Select good points
    good_new = p1[st==1]
    good_old = p0[st==1]

    # draw the tracks
    for i,(new, old) in enumerate(zip(good_new, good_old)):
        a,b = new.ravel()
        c,d = old.ravel()
        mask = cv2.line(mask, (int(a), int(b)), (int(c), int(d)), color[i].tolist(), 2)
        frame = cv2.circle(frame, (int(a), int(b)), 5, color[i].tolist(), -1)
    img = cv2.add(frame, mask)
    cv2.imshow('frame', img)
    k = cv2.waitKey(30) & 0xFF
    if k == 27:
        break
    old_gray = frame_gray.copy()
    p0 = good_new.reshape(-1, 1, 2)

cv2.destroyAllWindows()
cap.release()

OpenCV-Python中的圖像處理-視頻分析,OpenCV Python,python,opencv,圖像處理

Dense Optical Flow

import numpy as np
import cv2 as cv


cap = cv.VideoCapture('./resource/opencv/video/vtest.avi')
ret, frame1 = cap.read()
prvs = cv.cvtColor(frame1, cv.COLOR_BGR2GRAY)
hsv = np.zeros_like(frame1)
hsv[..., 1] = 255
while(1):
    ret, frame2 = cap.read()
    if not ret:
        print('No frames grabbed!')
        break
    next = cv.cvtColor(frame2, cv.COLOR_BGR2GRAY)
    flow = cv.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)
    mag, ang = cv.cartToPolar(flow[..., 0], flow[..., 1])
    hsv[..., 0] = ang*180/np.pi/2
    hsv[..., 2] = cv.normalize(mag, None, 0, 255, cv.NORM_MINMAX)
    bgr = cv.cvtColor(hsv, cv.COLOR_HSV2BGR)
    cv.imshow('frame2', bgr)
    k = cv.waitKey(30) & 0xff
    if k == 27:
        break
    elif k == ord('s'):
        cv.imwrite('./resource/opencv/video/opticalfb.png', frame2)
        cv.imwrite('./resource/opencv/video/opticalhsv.png', bgr)
        prvs = next
cv.destroyAllWindows()

OpenCV-Python中的圖像處理-視頻分析,OpenCV Python,python,opencv,圖像處理
OpenCV-Python中的圖像處理-視頻分析,OpenCV Python,python,opencv,圖像處理文章來源地址http://www.zghlxwxcb.cn/news/detail-658583.html

到了這里,關于OpenCV-Python中的圖像處理-視頻分析的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • OpenCV-Python中的圖像處理-GrabCut算法交互式前景提取

    OpenCV-Python中的圖像處理-GrabCut算法交互式前景提取

    cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode=…) img:輸入圖像 mask:掩模圖像,用來確定那些區(qū)域是背景,前景,可能是前景/背景等。 可以設置為: cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,或者直接輸入 0,1,2,3 也行。 rect :包含前景的矩形,格式為

    2024年02月12日
    瀏覽(21)
  • OpenCV-Python學習(10)—— OpenCV 圖像二值化處理(cv.threshold)

    OpenCV-Python學習(10)—— OpenCV 圖像二值化處理(cv.threshold)

    1. 學習目標 理解圖像的分類,不同類型的圖像的區(qū)別; 對圖像進行二值化處理,對【 cv.threshold 】函數的理解。 2. 圖像分類 2.1 不同類型圖像說明 按照顏色對圖像進行分類,可以分為二值圖像、灰度圖像和彩色圖像。 二值圖像: 只有黑色和白色兩種顏色的圖像。 每個像素

    2024年02月03日
    瀏覽(103)
  • 數字圖像處理(實踐篇)二十九 OpenCV-Python在圖像中檢測矩形、正方形和三角形的實踐

    數字圖像處理(實踐篇)二十九 OpenCV-Python在圖像中檢測矩形、正方形和三角形的實踐

    目錄 1 方案 2 實踐 1 方案 ①檢測矩形和正方形 ⒈檢測圖像中的所有輪廓。 ⒉循環(huán)檢查所有檢測到的輪廓。 ⒊為每個輪廓找到近似的輪廓。如果近似輪廓中的頂點數為4,則計算 寬高比 用來區(qū)分 矩形 和 正方形 。如果寬高比在0.9到1.1之間,則認為為正方形,否則的話,則為

    2024年01月25日
    瀏覽(99)
  • Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 視頻圖像處理基礎操作 之 視頻捕獲/存儲/提取/合成/合并

    目錄 Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 視頻圖像處理基礎操作 之 視頻捕獲/存儲/提取/合成/合并 一、簡單介紹 二、視頻處理流程和原理 三、視頻的捕獲和存儲 四、提取視頻中的某些幀 五、將圖片合成為視頻 六、多個視頻合并 Python是一種跨平臺的計算機程序設計

    2024年04月10日
    瀏覽(165)
  • “探索圖像處理的奧秘:使用Python和OpenCV進行圖像和視頻處理“

    “探索圖像處理的奧秘:使用Python和OpenCV進行圖像和視頻處理“

    ?1、上傳圖片移除背景后下載。在線摳圖軟件_圖片去除背景 | remove.bg – remove.bg 2、對下載的圖片放大2倍。ClipDrop - Image upscaler ?3、對放大后的下載照片進行編輯。 ?4、使用deepfacelive進行換臉。 1)將第三步的照片復制到指定文件夾。C:myAppdeepfakelivetempDeepFaceLive_NVIDIAuserda

    2024年02月16日
    瀏覽(106)
  • Python-OpenCV中的圖像處理-圖像梯度

    Python-OpenCV中的圖像處理-圖像梯度

    圖像梯度,圖像邊界等 使用到的函數有: cv2.Sobel(), cv2.Scharr(), cv2.Laplacian() 等 原理:梯度簡單來說就是求導。OpenCV 提供了三種不同的梯度濾波器,或者說高通濾波器: Sobel,Scharr 和 Laplacian。Sobel, Scharr 其實就是求一階或二階導數。 Scharr 是對 Sobel(使用小的卷積核求解

    2024年02月13日
    瀏覽(99)
  • Python-OpenCV中的圖像處理-圖像輪廓

    Python-OpenCV中的圖像處理-圖像輪廓

    輪廓可以簡單認為成將連續(xù)的點(連著邊界)連在一起的曲線,具有相同的顏色或者灰度。輪廓在形狀分析和物體的檢測和識別中很有用。 為了更加準確,要使用二值化圖像。在尋找輪廓之前,要進行閾值化處理或者 Canny 邊界檢測。 查找輪廓的函數會修改原始圖像。如果你

    2024年02月13日
    瀏覽(29)
  • Python-OpenCV中的圖像處理-圖像平滑

    Python-OpenCV中的圖像處理-圖像平滑

    使用低通濾波器可以達到圖像模糊的目的。這對與去除噪音很有幫助。其實就是去除圖像中的高頻成分(比如:噪音,邊界)。所以邊界也會被模糊一點。(當然,也有一些模糊技術不會模糊掉邊界)。 這是由一個歸一化卷積框完成的。他只是用卷積框覆蓋區(qū)域所有像素的平

    2024年02月13日
    瀏覽(23)
  • opencv 圖像和視頻處理的基本操作(python)

    opencv 圖像和視頻處理的基本操作(python)

    原圖: ? 1 圖片的獲取 主要通過cv2.imread(src)函數進行獲取 2 圖片的顯示 3 ROI區(qū)域(圖片截?。?4 圖片的RGB通道劃分 注意cv2.imread()獲取的圖片通過順序為BGR,而非RGB,即B為0,G為1,R為2 ?保留R通道 ?保留G通道 ? 保留B通道 ? 5 RGB通道合成 ? 6 邊界填充 主要是通過cv2.copyMakeBo

    2023年04月21日
    瀏覽(90)
  • Python-OpenCV中的圖像處理-圖像閥值

    Python-OpenCV中的圖像處理-圖像閥值

    與名字一樣,這種方法非常簡單。但像素值高于閾值時,我們給這個像素賦予一個新值(可能是白色),否則我們給它賦予另外一種顏色(也許是黑色)。這個函數就是 cv2.threshhold()。這個函數的第一個參數就是原圖像,原圖像應該是灰度圖。第二個參數就是用來對像素值進

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包