open cap 圖像 ide http 這樣的 vedio lease 等待

  最近因為要實現模板匹配,需要在視頻中選中一個目標,然後框出(即作為模板),對其利用模板匹配的方法進行檢測。於是需要首先選出視頻中的一幀,但是在利用攝像頭讀視頻的過程中我唯一能想到的方法就是:

1.在視頻播放的過程中,當想選中哪幅圖來標記目標時,按下暫停鍵。

2.框出你想要檢測的目標。

那要怎麽實現呢?

首先是暫停怎麽實現呢?介於是攝像頭直播,我們先將那副圖像復制並在另一個窗口顯示。然後關掉攝像頭,就完成了暫停。後面標記完目標再打開攝像頭就行了。那具體怎麽實現呢...

import cv2

drawing = False
ix, iy = -1, -1
tempFlag = False
def draw_circle(event, x, y, flags, param):
    global ix, iy, drawing, mode, cap, template, tempFlag
    if event == cv2.EVENT_LBUTTONDOWN:
        tempFlag = True
        drawing = True
        ix, iy = x, y                        #按下鼠標左鍵,用全局變量ix,iy記錄下當前坐標點
    elif event == cv2.EVENT_LBUTTONUP:
        if drawing == True:
            drawing = False                  #鼠標左鍵擡起,畫出矩形框
            cv2.rectangle(frame, (ix, iy), (x, y), (0, 255, 0), 1)
            template = frame[iy:y, ix:x, :]  #截取框中的目標圖像
            cap = cv2.VideoCapture(-1)       #打開攝像頭
            cv2.imshow(img, frame)         #顯示畫框後的圖像

cv2.namedWindow(img)
cv2.setMouseCallback(img, draw_circle)
cap = cv2.VideoCapture(-1)
while (True):
    ret, frame = cap.read()
    cv2.imshow(Vedio, frame)
    if tempFlag == True:         #如果框出了目標,顯示該目標
        cv2.imshow(temp, template)
    k = cv2.waitKey(33)
    if k == 27:                  #退出視頻
        break
    elif k == 32:                #如果按下空格鍵
        while(1):
            cap.release()        #關掉攝像頭
            imgCOPY = frame      #顯示關閉攝像頭前最後一張圖像
            cv2.imshow(img, frame)
            k = cv2.waitKey(0)   #等待調用鼠標回調函數框出目標
            if k == 32:          #框完目標,再次按下空格鍵,攝像頭捕捉的畫面重新播放
                break

結果如圖

技術分享技術分享技術分享

對於在圖像中框出目標,其實我先看了網上的代碼,比如http://blog.csdn.net/szfhy/article/details/51087301

我畫框後的圖片是這樣的

技術分享

內心是崩潰的,寶寶就只想要一個矩形框嘛~

本來我是想在畫矩形框時,有一個矩形框隨鼠標拖動大小隨之改變,且只有一個矩形框,鼠標擡起時,矩形框確定。暫時不知怎麽實現,有知道的可以交流一下,嘿嘿~

python+opencv選出視頻中一幀再利用鼠標回調實現圖像上畫矩形框