<button id="ssm6u"><optgroup id="ssm6u"></optgroup></button>
  • 跳轉至

    圖像切割與ROI

    概要

    講解了使用OpenCV的SelectROI函數, 裁剪圖片獲取圖片的局部(ROI)

    keywords ROI SelectROI 切割 索引

    SelectROI函數介紹

    selectROI這個函數封裝在opencv拓展包xfeature2d里面, 如果opencv是你自己編譯的要注意, 編譯的時候要添加拓展選項.

    關鍵函數就這么一行代碼.

    # Select ROI
    rect = cv2.selectROI("image", img, showCrosshair, fromCenter)
    

    參數解釋

    • "image" : winName 窗口名稱

    • img : 目標想要裁剪的圖像

    • showCrosshair : 是否顯示網格

    • True 顯示網格

    • False 只有矩形

    • fromCenter:

    • True 第一次選中的點為矩形的中心.

    • False 第一次選中的點為矩形的左上角.

    返回的是一個tuple值, 代表矩形區域. 分別代表矩形左上角坐標 (x, y) 與矩形寬度w跟高度h

    (x, y, w, h) = rect
    

    切片的時候一定要注意, 第一維指的是行數, 第二維度指的是列數.

    imCrop = img[y : y+h, x:x+w]
    

    使用過程

    第一步我們要選中這個矩形區域.

    Screenshot_20180202_221457.png

    接下來我們來確認是否選中.

    如果你要重新選擇, 需要在別的地方點擊一下.

    如果確認的話, 按Enter回車 或者Blank空格鍵.

    如果撤銷選擇, 按c鍵.

    Screenshot_20180202_221701.png

    這就是我們最終獲取的ROI區域的圖片.

    20180202image_roi.png

    源代碼

    src/select_roi_demo.py

    '''
    回車或者空格確認選擇
    c鍵 撤銷選擇
    '''
    import numpy as np
    import cv2
    
    # 設定文件路徑
    img_path = './screenshot.png'
    # Read image
    img = cv2.imread(img_path)
    
    # 創建一個窗口
    cv2.namedWindow("image", flags= cv2.WINDOW_NORMAL | cv2.WINDOW_FREERATIO)
    cv2.namedWindow("image_roi", flags= cv2.WINDOW_NORMAL | cv2.WINDOW_FREERATIO)
    
    cv2.imshow("image", img)
    # 是否顯示網格 
    showCrosshair = True
    # 如果為Ture的話 , 則鼠標的其實位置就作為了roi的中心
    # False: 從左上角到右下角選中區域
    fromCenter = False
    # Select ROI
    rect = cv2.selectROI("image", img, showCrosshair, fromCenter)
    
    print("選中矩形區域")
    (x, y, w, h) = rect
    
    # Crop image
    imCrop = img[y : y+h, x:x+w]
    
    # Display cropped image
    cv2.imshow("image_roi", imCrop)
    cv2.imwrite("image_roi.png", imCrop)
    cv2.waitKey(0)
    


    韩国精品无码一区二区三区,精品无码一区二区三区AV,欧洲丰满美熟女乱又伦AV,亚洲午夜久久久影院伊人