ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

meanshiftËã·¨Ô­Àí£ºmeanshift¸ú×ÙË㷨ʵս

¸üÐÂʱ¼ä:2021Äê07ÔÂ27ÈÕ15ʱ24·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

meanshiftËã·¨Ô­Àí

meanshiftËã·¨µÄÔ­ÀíºÜ¼òµ¥¡£¼ÙÉèÄãÓÐÒ»¶Ñµã¼¯£¬»¹ÓÐÒ»¸öСµÄ´°¿Ú£¬Õâ¸ö´°¿Ú¿ÉÄÜÊÇÔ²ÐεÄ£¬ÏÖÔÚÄã¿ÉÄÜÒªÒÆ¶¯Õâ¸ö´°¿Úµ½µã¼¯ÃܶÈ×î´óµÄÇøÓòµ±ÖС£

ÈçÏÂͼ£º

meanshiftËã·¨µÄÔ­Àí

×ʼµÄ´°¿ÚÊÇÀ¶É«Ô²»·µÄÇøÓò£¬ÃüÃûΪC1¡£À¶É«Ô²»·µÄÔ²ÐÄÓÃÒ»¸öÀ¶É«µÄ¾ØÐαê×¢£¬ÃüÃûΪC1_o¡£

¶ø´°¿ÚÖÐËùÓеãµÄµã¼¯¹¹³ÉµÄÖÊÐÄÔÚÀ¶É«Ô²ÐεãC1_r´¦£¬ÏÔȻԲ»·µÄÐÎÐĺÍÖÊÐIJ¢²»ÖغÏ¡£ËùÒÔ£¬Òƶ¯À¶É«µÄ´°¿Ú£¬Ê¹µÃÐÎÐÄÓë֮ǰµÃµ½µÄÖÊÐÄÖØºÏ¡£ÔÚÐÂÒÆ¶¯ºóµÄÔ²»·µÄÇøÓòµ±ÖÐÔÙ´ÎѰÕÒÔ²»·µ±ÖÐËù°üΧµã¼¯µÄÖÊÐÄ£¬È»ºóÔÙ´ÎÒÆ¶¯£¬Í¨³£Çé¿öÏ£¬ÐÎÐĺÍÖÊÐÄÊDz»ÖغϵÄ¡£²»¶ÏÖ´ÐÐÉÏÃæµÄÒÆ¶¯¹ý³Ì£¬Ö±µ½ÐÎÐĺÍÖÊÐÄ´óÖÂÖØºÏ½áÊø¡£ ÕâÑù£¬×îºóÔ²ÐεĴ°¿Ú»áÂäµ½ÏñËØ·Ö²¼×î´óµÄµØ·½£¬Ò²¾ÍÊÇͼÖеÄÂÌɫȦ£¬ÃüÃûΪC2¡£

meanshiftËã·¨³ýÁËÓ¦ÓÃÔÚÊÓÆµ×·×Ùµ±ÖУ¬ÔÚ¾ÛÀ࣬ƽ»¬µÈµÈ¸÷ÖÖÉæ¼°µ½Êý¾ÝÒÔ¼°·Ç¼à¶½Ñ§Ï°µÄ³¡ºÏµ±ÖоùÓÐÖØÒªÓ¦Óã¬ÊÇÒ»¸öÓ¦Óù㷺µÄËã·¨¡£

ͼÏñÊÇÒ»¸ö¾ØÕóÐÅÏ¢£¬ÈçºÎÔÚÒ»¸öÊÓÆµµ±ÖÐʹÓÃmeanshiftËã·¨À´×·×ÙÒ»¸öÔ˶¯µÄÎïÌåÄØ? ´óÖÂÁ÷³ÌÈçÏ£º

1.Ê×ÏÈÔÚͼÏñÉÏÑ¡¶¨Ò»¸öÄ¿±êÇøÓò

2.¼ÆËãÑ¡¶¨ÇøÓòµÄÖ±·½Í¼·Ö²¼£¬Ò»°ãÊÇHSVÉ«²Ê¿Õ¼äµÄÖ±·½Í¼¡£

3.¶ÔÏÂһ֡ͼÏñbͬÑù¼ÆËãÖ±·½Í¼·Ö²¼¡£

4.¼ÆËãͼÏñbµ±ÖÐÓëÑ¡¶¨ÇøÓòÖ±·½Í¼·Ö²¼×îΪÏàËÆµÄÇøÓò£¬Ê¹ÓÃmeanshiftËã·¨½«Ñ¡¶¨ÇøÓòÑØ×Å×îΪÏàËÆµÄ²¿·Ö½øÐÐÒÆ¶¯£¬Ö±µ½ÕÒµ½×îÏàËÆµÄÇøÓò£¬±ãÍê³ÉÁËÔÚͼÏñbÖеÄÄ¿±ê×·×Ù¡£

5.ÖØ¸´3µ½4µÄ¹ý³Ì£¬¾ÍÍê³ÉÕû¸öÊÓÆµÄ¿±ê×·×Ù¡£

ͨ³£Çé¿öÏÂÎÒÃÇʹÓÃÖ±·½Í¼·´ÏòͶӰµÃµ½µÄͼÏñºÍµÚÒ»Ö¡Ä¿±ê¶ÔÏóµÄÆðʼλÖ㬵±Ä¿±ê¶ÔÏóµÄÒÆ¶¯»á·´Ó³µ½Ö±·½Í¼·´ÏòͶӰͼÖУ¬meanshift Ëã·¨¾Í°ÑÎÒÃǵĴ°¿ÚÒÆ¶¯µ½·´ÏòͶӰͼÏñÖлҶÈÃܶÈ×î´óµÄÇøÓòÁË¡£ÈçÏÂͼËùʾ£º

Ö±·½Í¼·´ÏòͶӰµÄÁ÷³ÌÊÇ£º

¼ÙÉèÎÒÃÇÓÐÒ»ÕÅ100x100µÄÊäÈëͼÏñ£¬ÓÐÒ»ÕÅ10x10µÄÄ£°åͼÏñ£¬²éÕҵĹý³ÌÊÇÕâÑùµÄ£º

1.´ÓÊäÈëͼÏñµÄ×óÉϽÇ(0,0)¿ªÊ¼£¬ÇиîÒ»¿é(0,0)ÖÁ(10,10)µÄÁÙʱͼÏñ;

2.Éú³ÉÁÙʱͼÏñµÄÖ±·½Í¼;

3.ÓÃÁÙʱͼÏñµÄÖ±·½Í¼ºÍÄ£°åͼÏñµÄÖ±·½Í¼¶Ô±È£¬¶Ô±È½á¹û¼ÇΪc;

4.Ö±·½Í¼¶Ô±È½á¹ûc£¬¾ÍÊǽá¹ûͼÏñ(0,0)´¦µÄÏñËØÖµ;

5.ÇиîÊäÈëͼÏñ´Ó(0,1)ÖÁ(10,11)µÄÁÙʱͼÏñ£¬¶Ô±ÈÖ±·½Í¼£¬²¢¼Ç¼µ½½á¹ûͼÏñ;

6.ÖØ¸´1¡«5²½Ö±µ½ÊäÈëͼÏñµÄÓÒϽÇ£¬¾ÍÐγÉÁËÖ±·½Í¼µÄ·´ÏòͶӰ¡£

meanshiftÊÓÆµ×·×ÙʵÏÖ

ÔÚOpenCVÖÐʵÏÖMeanshiftµÄAPIÊÇ£º

cv.meanShift(probImage, window, criteria)

²ÎÊý£º

·probImage: ROIÇøÓò£¬¼´Ä¿±êµÄÖ±·½Í¼µÄ·´ÏòͶӰ

·window£º ³õʼËÑË÷´°¿Ú£¬¾ÍÊǶ¨ÒåROIµÄrect

·criteria: È·¶¨´°¿ÚËÑË÷Í£Ö¹µÄ×¼Ôò£¬Ö÷ÒªÓеü´ú´ÎÊý´ïµ½ÉèÖõÄ×î´óÖµ£¬´°¿ÚÖÐÐĵį¯ÒÆÖµ´óÓÚij¸öÉ趨µÄÏÞÖµµÈ¡£

ʵÏÖMeanshiftµÄÖ÷ÒªÁ÷³ÌÊÇ£º

1.¶ÁÈ¡ÊÓÆµÎļþ£ºcv.videoCapture()

2.¸ÐÐËÈ¤ÇøÓòÉèÖ㺻ñÈ¡µÚһ֡ͼÏñ£¬²¢ÉèÖÃÄ¿±êÇøÓò£¬¼´¸ÐÐËÈ¤ÇøÓò

3.¼ÆËãÖ±·½Í¼£º¼ÆËã¸ÐÐËÈ¤ÇøÓòµÄHSVÖ±·½Í¼£¬²¢½øÐйéÒ»»¯

4.Ä¿±ê×·×Ù£ºÉèÖô°¿ÚËÑË÷Í£Ö¹Ìõ¼þ£¬Ö±·½Í¼·´ÏòͶӰ£¬½øÐÐÄ¿±ê×·×Ù£¬²¢ÔÚÄ¿±êλÖûæÖƾØÐοò¡£

ʾÀý£º

import numpy as np
import cv2 as cv
# 1.»ñȡͼÏñ
cap = cv.VideoCapture('DOG.wmv')

# 2.»ñÈ¡µÚһ֡ͼÏñ£¬²¢Ö¸¶¨Ä¿±êλÖÃ
ret,frame = cap.read()
# 2.1 Ä¿±êλÖã¨ÐУ¬¸ß£¬ÁУ¬¿í£©
r,h,c,w = 197,141,0,208  
track_window = (c,r,w,h)
# 2.2 Ö¸¶¨Ä¿±êµÄ¸ÐÐËÈ¤ÇøÓò
roi = frame[r:r+h, c:c+w]

# 3. ¼ÆËãÖ±·½Í¼
# 3.1 ת»»É«²Ê¿Õ¼ä£¨HSV£©
hsv_roi =  cv.cvtColor(roi, cv.COLOR_BGR2HSV)
# 3.2 È¥³ýµÍÁÁ¶ÈµÄÖµ
# mask = cv.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
# 3.3 ¼ÆËãÖ±·½Í¼
roi_hist = cv.calcHist([hsv_roi],[0],None,[180],[0,180])
# 3.4 ¹éÒ»»¯
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)

# 4. Ä¿±ê×·×Ù
# 4.1 ÉèÖô°¿ÚËÑË÷ÖÕÖ¹Ìõ¼þ£º×î´óµü´ú´ÎÊý£¬´°¿ÚÖÐÐÄÆ¯ÒÆ×îСֵ
term_crit = ( cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1 )

while(True):
    # 4.2 »ñȡÿһ֡ͼÏñ
    ret ,frame = cap.read()
    if ret == True:
        # 4.3 ¼ÆËãÖ±·½Í¼µÄ·´ÏòͶӰ
        hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
        dst = cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)

        # 4.4 ½øÐÐmeanshift×·×Ù
        ret, track_window = cv.meanShift(dst, track_window, term_crit)

        # 4.5 ½«×·×ÙµÄλÖûæÖÆÔÚÊÓÆµÉÏ£¬²¢½øÐÐÏÔʾ
        x,y,w,h = track_window
        img2 = cv.rectangle(frame, (x,y), (x+w,y+h), 255,2)
        cv.imshow('frame',img2)

        if cv.waitKey(60) & 0xFF == ord('q'):
            break        
    else:
        break
# 5. ×ÊÔ´ÊÍ·Å        
cap.release()
cv.destroyAllWindows()

ÏÂÃæÊÇÈý֡ͼÏñµÄ¸ú×Ù½á¹û£º

meanshiftÊÓÆµ×·×ÙЧ¹û

CamshiftËã·¨

´ó¼ÒÈÏÕæ¿´ÏÂÉÏÃæµÄ½á¹û£¬ÓÐÒ»¸öÎÊÌ⣬¾ÍÊǼì²âµÄ´°¿ÚµÄ´óСÊǹ̶¨µÄ£¬¶ø¹·¹·Óɽü¼°Ô¶ÊÇÒ»¸öÖð½¥±äСµÄ¹ý³Ì£¬¹Ì¶¨µÄ´°¿ÚÊDz»ºÏÊʵÄ¡£ËùÒÔÎÒÃÇÐèÒª¸ù¾ÝÄ¿±êµÄ´óСºÍ½Ç¶ÈÀ´¶Ô´°¿ÚµÄ´óСºÍ½Ç¶È½øÐÐÐÞÕý¡£CamShift¿ÉÒÔ°ïÎÒÃǽâ¾öÕâ¸öÎÊÌâ¡£

CamShiftË㷨ȫ³ÆÊÇ“Continuously Adaptive Mean-Shift”(Á¬Ðø×ÔÊÊÓ¦MeanShiftËã·¨)£¬ÊǶÔMeanShiftËã·¨µÄ¸Ä½øËã·¨£¬¿ÉËæ×Ÿú×ÙÄ¿±êµÄ´óС±ä»¯ÊµÊ±µ÷ÕûËÑË÷´°¿ÚµÄ´óС£¬¾ßÓнϺõĸú×ÙЧ¹û¡£

CamshiftËã·¨Ê×ÏÈÓ¦ÓÃmeanshift£¬Ò»µ©meanshiftÊÕÁ²£¬Ëü¾Í»á¸üд°¿ÚµÄ´óС£¬»¹¼ÆËã×î¼ÑÄâºÏÍÖÔ²µÄ·½Ïò£¬´Ó¶ø¸ù¾ÝÄ¿±êµÄλÖúʹóС¸üÐÂËÑË÷´°¿Ú¡£ÈçÏÂͼËùʾ£º

CamshiftËã·¨

CamshiftÔÚOpenCVÖÐʵÏÖʱ£¬Ö»Ð轫ÉÏÊöµÄmeanshiftº¯Êý¸ÄΪCamshiftº¯Êý¼´¿É£º

½«CamshiftÖеÄ£º

 # 4.4 ½øÐÐmeanshift×·×Ù
        ret, track_window = cv.meanShift(dst, track_window, term_crit)
        # 4.5 ½«×·×ÙµÄλÖûæÖÆÔÚÊÓÆµÉÏ£¬²¢½øÐÐÏÔʾ
        x,y,w,h = track_window
        img2 = cv.rectangle(frame, (x,y), (x+w,y+h), 255,2)

¸ÄΪ£º

#½øÐÐcamshift×·×Ù
    ret, track_window = cv.CamShift(dst, track_window, term_crit)

        # »æÖÆ×·×Ù½á¹û
        pts = cv.boxPoints(ret)
        pts = np.int0(pts)
        img2 = cv.polylines(frame,[pts],True, 255,2)

Ëã·¨×ܽá

meanshift

Ô­Àí£ºÒ»¸öµü´úµÄ²½Ö裬¼´ÏÈËã³öµ±Ç°µãµÄÆ«ÒÆ¾ùÖµ£¬Òƶ¯¸Ãµãµ½ÆäÆ«ÒÆ¾ùÖµ£¬È»ºóÒÔ´ËΪÐÂµÄÆðʼµã£¬¼ÌÐøÒÆ¶¯£¬Ö±µ½Âú×ãÒ»¶¨µÄÌõ¼þ½áÊø¡£

API£ºcv.meanshift()

ÓÅȱµã£º¼òµ¥£¬µü´ú´ÎÊýÉÙ£¬µ«ÎÞ·¨½â¾öÄ¿±êµÄÕÚµ²ÎÊÌâ²¢ÇÒ²»ÄÜÊÊÓ¦Ô˶¯Ä¿±êµÄµÄÐÎ×´ºÍ´óС±ä»¯

camshift

Ô­Àí£º¶ÔmeanshiftËã·¨µÄ¸Ä½ø£¬Ê×ÏÈÓ¦ÓÃmeanshift£¬Ò»µ©meanshiftÊÕÁ²£¬Ëü¾Í»á¸üд°¿ÚµÄ´óС£¬»¹¼ÆËã×î¼ÑÄâºÏÍÖÔ²µÄ·½Ïò£¬´Ó¶ø¸ù¾ÝÄ¿±êµÄλÖúʹóС¸üÐÂËÑË÷´°¿Ú¡£

API£ºcv.camshift()

ÓÅȱµã£º¿ÉÊÊÓ¦Ô˶¯Ä¿±êµÄ´óСÐÎ×´µÄ¸Ä±ä£¬¾ßÓнϺõĸú×ÙЧ¹û£¬µ«µ±±³¾°É«ºÍÄ¿±êÑÕÉ«½Ó½üʱ£¬ÈÝÒ×ʹĿ±êµÄÇøÓò±ä´ó£¬×îÖÕÓпÉÄܵ¼ÖÂÄ¿±ê¸ú×Ù¶ªÊ§

¡¶Í¼Ïñ´¦ÀíOpenCVÈëÃŽ̡̳·¿Î³Ìµ¼¶Á


¼ÓQQ£º435946716£¬»ñÈ¡¡¶Í¼Ïñ´¦ÀíOpenCVÈëÃŽ̡̳·È«Ì×ÊÓÆµ½Ì³Ì+±Ê¼Ç+Ô´Âë¡£



²ÂÄãϲ»¶£º

OpenCVͼƬÏà¼ÓºÍ»ìºÏµÄ·½·¨

ʲôÊÇOpenCV£¿OpenCV°²×°½Ì³Ì

Harris½Çµã¼ì²âÔ­Àí

ÓïÑÔÄ£ÐÍ-BERT£ºbertËã·¨½éÉÜ

ÀÖÓãµç¾ºÈ˹¤ÖÇÄÜ¿ª·¢¿Î³Ì

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡

¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿