簡體   English   中英

OpenCV Python中的輪廓對象檢測和提取

[英]Contour object detection and extraction in OpenCV Python

我試圖從輪廓中檢測到三個矩形。 我已經從整個圖像中提取了整個輪廓。 我正在附上下面提取的輪廓圖像。 我想找出一種從整個輪廓中進一步提取三個矩形面板的方法。

提取的輪廓圖像:

在此輸入圖像描述

這是一個簡單的方法:

  • 將圖像轉換為灰度
  • 獲取二進制圖像的閾值
  • 執行形態學操作以平滑圖像
  • 查找輪廓並提取ROI

轉換為灰度后,我們閾值獲取二進制圖像

image = cv2.imread('1.png')
original = image.copy()

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY)[1]

接下來,我們創建一個內核並執行形態學操作以平滑圖像。 該步驟通過侵蝕圖像來“破壞”連接三個矩形的關節

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25,25))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=3)

從這里我們找到輪廓並用numpy切片提取ROI。 在原始圖像上繪制所需矩形的邊界框

cnts = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

image_number = 0
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 3)
    ROI = original[y:y+h, x:x+w]
    cv2.imwrite("ROI_{}.png".format(image_number), ROI)
    image_number += 1

這是每個人節省的投資回報率

完整代碼

import cv2

image = cv2.imread('1.png')
original = image.copy()

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25,25))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=3)

cnts = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

image_number = 0
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 3)
    ROI = original[y:y+h, x:x+w]
    cv2.imwrite("ROI_{}.png".format(image_number), ROI)
    image_number += 1

cv2.imshow('opening', opening)
cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()

這看起來像是一個用足夠大的內核打開以侵蝕矩形之間的線條的情況。

另一種方法是多次erode ,然后調用dilate相同的次數。

一個小小的建議,你可能想對你的圖像應用一個thresh-hold,因為它看起來你有一些噪音(特別是在左邊和頂部的矩形)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM