Canny正在检测除道路以外的所有地方的边缘。
这是原始图像。
https://imgur.com/a/O4ZVvb6
这是一个示例图像。
https://imgur.com/a/AqENNbq
我已经尝试过使用Canny阈值。
并应用高斯模糊,中值模糊,bilateralFilter,
我也尝试过先使用黑白图像阈值拟合器,但是问题是地形会稍微改变颜色并导致问题。
import numpy as np
from PIL import ImageGrab
import cv2
import time
def screen_record():
last_time = time.time()
while(True):
# record upper left corner of screen to get the image.
printscreen = np.array(ImageGrab.grab(bbox=(0,40,1098,728)))
print('loop took {} seconds'.format(time.time()-last_time))
last_time = time.time()
color = cv2.cvtColor(printscreen, cv2.COLOR_BGR2GRAY)
canny = cv2.Canny(color, 20, 100)
cv2.imshow('edges',canny)
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
screen_record()
我希望只有一条实线。
像下面的图像。
https://imgur.com/a/09vTE9e
最佳答案
您可以同时使用打开和关闭操作来过滤canny
中的嘈杂边缘。代码如下。
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('vLnzxEs.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
canny = cv2.Canny(gray, 20, 100)
# visualize the canny image
plt.figure
plt.imshow(canny, cmap='gray')
#decleare kernel for closing and opening operations
kernel = np.ones((75,75),np.uint8)
# apply closing and opening
closing = cv2.morphologyEx(canny, cv2.MORPH_CLOSE, kernel)
opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, kernel)
# visualize the opening
plt.figure
plt.imshow(opening, cmap='gray')
输出看起来像
关于python - Python Open CV canny正在检测除边缘以外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57636662/