python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框
生活随笔
收集整理的這篇文章主要介紹了
python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近因為要實現模板匹配,需要在視頻中選中一個目標,然后框出(即作為模板),對其利用模板匹配的方法進行檢測。于是需要首先選出視頻中的一幀,但是在利用攝像頭讀視頻的過程中我唯一能想到的方法就是:
1.在視頻播放的過程中,當想選中哪幅圖來標記目標時,按下暫停鍵。
2.框出你想要檢測的目標。
那要怎么實現呢?
首先是暫停怎么實現呢?介于是攝像頭直播,我們先將那副圖像復制并在另一個窗口顯示。然后關掉攝像頭,就完成了暫停。后面標記完目標再打開攝像頭就行了。那具體怎么實現呢...
import cv2drawing = False ix, iy = -1, -1 tempFlag = False def draw_circle(event, x, y, flags, param):global ix, iy, drawing, mode, cap, template, tempFlagif event == cv2.EVENT_LBUTTONDOWN:tempFlag = Truedrawing = Trueix, 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: #退出視頻breakelif 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
我畫框后的圖片是這樣的
內心是崩潰的,寶寶就只想要一個矩形框嘛~
本來我是想在畫矩形框時,有一個矩形框隨鼠標拖動大小隨之改變,且只有一個矩形框,鼠標抬起時,矩形框確定。暫時不知怎么實現,有知道的可以交流一下,嘿嘿~
轉載于:https://www.cnblogs.com/subic/p/6937611.html
總結
以上是生活随笔為你收集整理的python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乌镇学生证检查严格吗
- 下一篇: 求一个网名叫尤物少女的qq号!