用python中的opencv有没有办法获得更清晰、更连续的优势?

用python中的opencv有没有办法获得更清晰、更连续的优势?,python,algorithm,opencv,machine-learning,deep-learning,Python,Algorithm,Opencv,Machine Learning,Deep Learning,我试图做一个边缘检测,从流动图形中的左图像生成右图像 有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,cma

我试图做一个边缘检测,从流动图形中的左图像生成右图像

有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')
这是输出

OpenCV忽略了原始图像中红色部分的边缘,这不符合我的需要

方形边缘也被丢弃,这不符合我的需要

在右轴上检测到的边不是连续的,这不符合我的需要


有没有办法修复以上3个bug?或者如何实现一个新算法来满足我的需要。

您可以通过更改Canny的值来改进结果。因为您的图像由颜色相似的区域组成,所以您可以发现边缘非常好:

您可以使用此代码自己尝试:

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()

请发布一个完整的工作示例,以便我们能够重现您所做的工作,包括“导入”行,如果可能,还包括输入图像img2.png。