Как отметить центр и рассчитать диаметр изображения с помощью opencv - python? - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над распознаванием центра и рендерингом изображений. Я использую cv2.findContours для определения границ интересующего изображения. И используя cv.minEnclosingCircle (cnt) для обхода моей области интересов. Приведенный ниже код позволяет определить центр каждой области интереса, но я не могу отметить в выводе изображения кружок, соответствующий изображению, которое я хочу вычислить, а также хочу обозначить точкой pqno точное местоположение, где алгоритм определил центр.

import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.offsetbox import AnchoredText


thresh = cv2.imread('IMD044.png',0)
_, contours,hierarchy = cv2.findContours(thresh,2,1)
print (len(contours))
cnt = contours

for i in range (len(cnt)):
    (x,y),radius = cv2.minEnclosingCircle(cnt[i])
    center = (int(x),int(y))
    radius = int(radius)
    cv2.circle(thresh,center,radius,(0,255,0),2)
    print ('Circle: ' + str(i) + ' - Center: ' + str(center) + ' -     Radius: ' + str(radius))
plt.text(x-15, y+10, '+', fontsize=25, color = 'red')
plt.text(10, -10, 'Centro: '+str(center), fontsize=11, color = 'red')
plt.text(340, -10, 'Diametro: '+str((radius*2)/100)+'mm', fontsize=11, color = 'red')
plt.Circle(x, y, color='red', fill=False)
plt.imshow(thresh, cmap='gray')
plt.show()

Я использовал документацию Opencv для разграничения контуров и получения областей, но отметка зеленого круга не появляется.

Выход:

enter image description here

Выход ожидается: enter image description here

обновляя вопрос, я смог добавить информацию, нужно только добавить кружок и проверить, правильный ли диаметр.

1 Ответ

0 голосов
/ 13 ноября 2018

Вы используете одноканальное изображение, но пытаетесь показать 3-канальный цвет.Добавьте следующее:

...
thresh = cv2.imread('IMD016.png',0)
_, contours,hierarchy = cv2.findContours(thresh,2,1)
thresh = cv2.cvtColor(thresh, cv2.COLOR_GRAY2RGB)
print (len(contours))
...

Кроме того, будьте особенно осторожны при смешивании процедур рисования OpenCV и PyPlot.OpenCV использует BGR по умолчанию, а PyPlot использует RGB.Кроме того, cv2 процедуры рисования не добавляют дополнительные каналы, в то время как plt делает.Просто нужно помнить об этом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...