2015-02-26 3 views
0

Я тестирую функцию cv2.threshold() с разными значениями, но получаю каждый раз неожиданные результаты. Таким образом, это означает, просто я не понимаю, эффект parameter:draw контур cv2.threshold() function

  • MAXVAL

Может кто-то очистить меня по этому поводу?

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

enter image description here

Вот что я получил:

enter image description here

Из этого кода:

import cv2  
im=cv2.imread('image.jpg') # read picture 

imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) # BGR to grayscale 

ret,thresh=cv2.threshold(imgray,200,255,cv2.THRESH_BINARY_INV) 

countours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 


cv2.drawContours(im,countours,-1,(0,255,0),3) 
cv2.imshow("Contour",im) 

cv2.waitKey(0) 
cv2.destroyAllWindows() 

Каждый раз, когда я меняю значение maxval, я получаю странный результат, который я не могу понять. Как я могу правильно нарисовать контур этой звезды, используя эту функцию?

Заранее спасибо.

ответ

2

Возможно, вам захочется поэкспериментировать с очень простым изображением, которое позволяет вам понять различные параметры. Интересная вещь, связанная с изображением, приведенным ниже, заключается в том, что значение оттенка серого числа, показанного на изображении, равно числу. Например. 200 написано с оттенком серого 200. Вот пример кода python, который вы можете использовать.

import cv2 

# Read image 
src = cv2.imread("threshold.png", cv2.CV_LOAD_IMAGE_GRAYSCALE) 

# Set threshold and maxValue 
thresh = 127 
maxValue = 255 

# Basic threshold example 
th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_BINARY); 

# Find Contours 
countours,hierarchy=cv2.findContours(dst,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 

# Draw Contour 
cv2.drawContours(dst,countours,-1,(255,255,255),3) 

cv2.imshow("Contour",dst) 
cv2.waitKey(0) 

Я скопировал следующее изображение из OpenCV Threshold Tutorial я написал недавно. Он объясняет различные параметры с помощью примера image, Python и C++ Code. Надеюсь это поможет.

Input Image

OpenCV Threshold Test Image

Результат Изображение enter image description here

+0

спасибо за внимание, но он не отвечает на мой вопрос правильно –

+0

Я обновил свой ответ. Пожалуйста, дайте мне знать, если это поможет. Лучший способ узнать о различных параметрах - взять код, который я дал, и изменить параметры и посмотреть, что произойдет. –

+0

большое спасибо. Я должен прочитать учебник, который вы глубоко мне дали. Спасибо –

0

Для большей точности при поиске контуров можно применить порог на изображение в виде бинарного изображения, как правило, дают более высокую точность, а затем использовать контуры method.Hope это помогу..!!!

0

хорошо здесь вы можете использовать COLOR_BGR2HSV, а затем выбрать цвет, и создание контура будет довольно простым, попробуйте и дайте мне знать в черном цвете и в то время как у вас есть одинаковый цвет желтого и белого цветов, поэтому это не работает

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