改善pyopencv(cv2.Canny)中较差的边缘检测结果

时间:2019-09-18 02:12:25

标签: python opencv optimization edge-detection

我正在尝试对某些照片进行边缘检测,但没有像打开的cv website

中的示例那样获得良好的结果

我创建了一个脚本,该脚本可反复生成具有不同检测限的图,并使用许多不同的参数进行测试,但似乎无法获得令人满意的结果。

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('Topaz.jpg',0)
#edges = cv2.Canny(img,500,600)

lower = np.linspace(start=0, stop=255, num=10)
upper = np.linspace(start=0, stop=255, num=10)

save_as = "Plot.png"


def vary_thresh(img, upper, lower, save_as):
    blur = cv2.blur(img,(3,3))
    #blur = img
    fig = plt.figure(figsize=(20,20))
    sp = 0
    plot_count = 0
    for i in lower:
        for b in upper:
            edges = cv2.Canny(blur,i,b, L2gradient = False)
            if abs(i - b) < 150:
                print ("Invalid range skipping")
                continue
            sp += 1
            print ("Plot #: " + str(sp))
            plt.subplot(15,3,sp),plt.imshow(edges,cmap = 'gray')
            plt.title("L = " + str(round(i)) + "U" + str(round(b)))
    print(sp)
    plt.show()
    plt.savefig(save_as)


vary_thresh(img, upper, lower, save_as)

~~我不确定如何发布我正在使用的示例图像(第一次在这里),但是很高兴看到那里没有。也可以给出即时输出的屏幕截图。 ~~

这是图片 https://i.imgur.com/BKduCLg.jpg

这是输出示例 https://imgur.com/a/XvN0Ac3

0 个答案:

没有答案