Есть ли способ получить более четкое и последовательное преимущество с помощью opencv в python? - PullRequest
2 голосов
/ 23 мая 2019

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

enter image description here

Есть 3 разных цветных области, поэтому результат состоит из 3 отдельных частей.

вот мой код

img = cv2.imread('img2.png')
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
f, axs = plt.subplots(1,2,figsize=(12,8))
edges = cv2.Canny(img,1,255)
axs[0].imshow(imgRGB)
axs[1].imshow(edges,cmap = 'gray')

вот вывод

enter image description here

край красной части исходного изображения игнорируется OpenCV, что не отвечает моим потребностям.

квадратный край также отбрасывается, что не соответствует моей потребности.

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

есть ли способ исправить выше 3 ошибок? или как реализовать новый алгоритм, отвечающий моим потребностям.

1 Ответ

5 голосов
/ 23 мая 2019

Вы можете улучшить результат, изменив значения для Canny.Поскольку ваше изображение состоит из областей одинакового цвета, вы можете найти края действительно хорошими:

enter image description here

Вы можете использовать этот код, чтобы попробовать сами:

import cv2
import numpy as np

cv2.namedWindow('Result')
img = cv2.imread('qkEuE.png')

v1 = 0
v2 = 0

def doEdges():
    edges = cv2.Canny(img,v1,v2)
    edges = cv2.cvtColor(edges,cv2.COLOR_GRAY2BGR)
    res = np.concatenate((img,edges),axis = 0)
    cv2.imshow('Result',res)
def setVal1(val):
    global v1
    v1 = val
    doEdges()
def setVal2(val):
    global v2
    v2 = val
    doEdges()

cv2.createTrackbar('Val1','Result',0,500,setVal1)
cv2.createTrackbar('Val2','Result',0,500,setVal2)

cv2.imshow('Result',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...