我正在尝试对某些照片进行边缘检测,但没有像打开的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