使用Python和OpenCV捕获鼠标事件,并裁剪图像
生活随笔
收集整理的這篇文章主要介紹了
使用Python和OpenCV捕获鼠标事件,并裁剪图像
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Python和OpenCV捕獲鼠標事件,并裁剪圖像
- 1. 效果圖
- 2. 源碼
- 參考
這篇博客將介紹如何使用Python和OpenCV捕獲鼠標事件。還演示了如何快速裁剪和提取圖像區域,這在為自己的自定義對象檢測器創建訓練數據時特別有用。
該示例將點擊圖片,并拖動一個矩形的興趣區(ROI),然后從圖像中裁剪出來。
1. 效果圖
拿我最喜歡的小林老師的漫畫圖,截圖圖像中的薰衣草圖片ROI,并展示,效果圖如下:
在截一下郁金香,郁金香ROI下圖右側~~
2. 源碼
# 使用Python,OpenCV捕獲鼠標單擊事件
# USAGE
# python click_and_crop.py --image lin_image.jpg# 導入必要的類
import argparse
import cv2
import imutils# 初始化參考點列表和布爾值標志:是否正在執行裁剪
refPt = []
cropping = False# 點擊并裁剪ROI區域
# -events 鼠標事件(如按下鼠標左鍵,釋放鼠標左鍵,鼠標移動等)
# -x x坐標
# -y y坐標
# -flages params 其他參數
def click_and_crop(event, x, y, flags, param):# 獲取全局變量的引用global refPt, cropping# 如果鼠標左被單擊,記錄(x,y)坐標并顯示裁剪正在進行if event == cv2.EVENT_LBUTTONDOWN:refPt = [(x, y)]cropping = True# 檢測鼠標左鍵是否釋放elif event == cv2.EVENT_LBUTTONUP:# 記錄結束(x,y)坐標,并顯示裁剪結束refPt.append((x, y))cropping = False# 在感興趣區域記錄矩形區域cv2.rectangle(image, refPt[0], refPt[1], (0, 255, 0), 2)cv2.imshow("image", image)# 構建命令行參數及解析
# -image 原始圖像的路徑
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())# 加載圖像,并復制,設置鼠標回調函數
image = cv2.imread(args["image"])
image = imutils.resize(image, width=500)
clone = image.copy()
cv2.namedWindow("image")
cv2.setMouseCallback("image", click_and_crop)# 保持循環直至按下‘q’鍵
while True:# 展示圖像并等待按下鍵cv2.imshow("image", image)key = cv2.waitKey(1) & 0xFF# 如果按下‘r’鍵,則重置裁剪區域if key == ord("r"):image = clone.copy()# 按下‘q’鍵,跳出循環elif key == ord("q"):break# 如果參考點列表里有倆個點,則裁剪區域并展示
if len(refPt) == 2:roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]]cv2.imshow("ROI", roi)cv2.waitKey(0)# 關閉所有打開的窗口
cv2.destroyAllWindows()
參考
- https://www.pyimagesearch.com/2015/03/09/capturing-mouse-click-events-with-python-and-opencv/
總結
以上是生活随笔為你收集整理的使用Python和OpenCV捕获鼠标事件,并裁剪图像的全部內容,希望文章能夠幫你解決所遇到的問題。