Найдите черные круги/контур для определенной формы на изображении, но обнаружены неправильные контуры PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Найдите черные круги/контур для определенной формы на изображении, но обнаружены неправильные контуры Python

Сообщение Anonymous »

Я использовал findContours() OpenCV, чтобы найти круглые формы черных пикселей. Иногда он выбирает странную область других фигур, окружающую черные пиксели, например. на прилагаемом рисунке
Изображение
(в качестве примера я выделил странный контур, обнаруженный знаком Красного Креста; однако , я хочу обнаружить только задние круги или даже любой круг на изображении, выделенный красными кругами..
Я даже применил пороговое значение, но без изменений..
Я прикрепляю исходное изображение
Изображение
..
Я также могу знать контрастность изображение не в порядке... но я просто хочу понять, почему поиск контура дает странные контуры... Есть ли способ не выбирать все контуры?.
Использованный код показан ниже
import cv2
from matplotlib import pyplot as plt
import numpy as np

# Read image
img = cv2.imread('test_shapes.png')
out=img.copy()
gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)

# Use fixed threshold to mask black areas
_, thresh = cv2.threshold(gray, 30, 255, cv2.THRESH_BINARY_INV)

# Morphological closing to get whole particles; opening to get rid of noise
img_mop = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7)))
img_mop = cv2.morphologyEx(img_mop, cv2.MORPH_OPEN, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15)))
# Find contours
contours, _ = cv2.findContours(img_mop, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

for i, cnt in enumerate(contours):
for jj,contour_point in enumerate(cnt):
if i ==0:
continue
epsilon=0.1 * cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)
cv2.circle(out,(contour_point[0][0],contour_point[0][1]),2,(255,0,22),2,cv2.LINE_AA)
x,y,w,h=cv2.boundingRect(approx)
x_mid=int(x+w/3)
y_mid=int(y+h/1.5)
coords=(x_mid,y_mid)
colour=(0,255,0)
font=cv2.FONT_HERSHEY_DUPLEX
if 2

Подробнее здесь: https://stackoverflow.com/questions/791 ... contours-d
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»