2017-01-06 4 views
2

Так что я пытаюсь нарисовать выпуклый элемент из контура в python, однако, когда я печатаю изображение, оно не меняется.Рисунок convexHull в openCV2 Python

roi=mask[y:y+h,x:x+w] 
roi = cv2.fastNlMeansDenoisingColored(roi,None,15,15,7,21) 
hull = cv2.convexHull(cnt) 
cv2.drawContours(roi,[hull],0,(147,0,255),2) 
cv2.imshow(str(i),roi) 
blank_image[y:y+h,x:x+w] = roi 

Однако изображения, которые отображаются, являются точными, если я не включил этот код. Я смотрел онлайн, но, похоже, не нашел ответа. Вот пример изображение: Sample Image

+0

Кто-нибудь знает? Все еще не удается найти исправление. –

+0

Вы можете загрузить изображение, с которым работаете? –

+0

@JeruLuke Много изображений, каждое из изображений ограничено. Я создаю платформу OCR, поэтому каждый ROI - это другой персонаж. –

ответ

4

Я использовал следующий код, чтобы получить выпуклую оболочку для изображения заданного вами:

import cv2 
import numpy as np 

img = cv2.imread('2.png') 
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
ret, thresh = cv2.threshold(img_gray, 127, 255, 0) 
contours,hierarchy = cv2.findContours(thresh,2,1) 
print len(contours) 
cnt = contours[0] 

hull = cv2.convexHull(cnt,returnPoints = False) 
defects = cv2.convexityDefects(cnt,hull) 

for i in range(defects.shape[0]): 
    s,e,f,d = defects[i,0] 
    start = tuple(cnt[s][0]) 
    end = tuple(cnt[e][0]) 
    far = tuple(cnt[f][0]) 
    cv2.line(img,start,end,[0,255,0],2) 
    cv2.circle(img,far,5,[0,0,255],-1) 

cv2.imshow('img',img) 

cv2.waitKey(0) 
cv2.destroyAllWindows() 

Поскольку контуры основаны на белой области в изображении, я был в состоянии для получения двух типы контуров путем изменения строка 5 в коде.

СЛУЧАЙ 1:

Я был в состоянии получить это: enter image description here

СЛУЧАЙ 2: Теперь, когда я изменить пятую линию в сегменте кода, я получите это: enter image description here, когда я инвертирую двоичное изображение ret, thresh = cv2.threshold(img_gray, 127, 255, 1)

Это происходит потому, что в случае 1 контур был найден на основе этого образа enter image description here

Сейчас в случае 2 контур был найден на основе этого образа enter image description here

Как вы можете видеть, контуры найдены основанный на белый регион в двоичном образе.

Надеюсь, это поможет.

Я использовал THIS LINK для получения кода и для справки.

+0

Спасибо. Было сложно найти ссылку на версию python. –

+0

Рад, что я мог помочь. Просто имейте в виду, как я уже говорил ранее, строка №5 может внести изменения в то, какой контур вы ищете. –

Смежные вопросы