Python Open CV canny正在检测除边缘以外的所有内容
Canny正在检测除道路外的所有边缘。 这是原始图像。 这是一个示例图像。 我已经试过玩精明的门槛了。 应用高斯滤波,中值滤波,双边滤波 我还尝试先使用黑白图像阈值拟合器,但问题是地形颜色略有变化,这会导致问题Python Open CV canny正在检测除边缘以外的所有内容,python,opencv,Python,Opencv,Canny正在检测除道路外的所有边缘。 这是原始图像。 这是一个示例图像。 我已经试过玩精明的门槛了。 应用高斯滤波,中值滤波,双边滤波 我还尝试先使用黑白图像阈值拟合器,但问题是地形颜色略有变化,这会导致问题 将numpy导入为np 从PIL导入ImageGrab 进口cv2 导入时间 def屏幕_记录(): last_time=time.time() 虽然(正确): #记录屏幕左上角以获取图像。 printscreen=np.array(ImageGrab.grab(bbox=(0,40
将numpy导入为np
从PIL导入ImageGrab
进口cv2
导入时间
def屏幕_记录():
last_time=time.time()
虽然(正确):
#记录屏幕左上角以获取图像。
printscreen=np.array(ImageGrab.grab(bbox=(0,401098728)))
打印('循环耗时{}秒'。格式(time.time()-last_time))
last_time=time.time()
颜色=cv2.CVT颜色(打印屏幕,cv2.color\U BGR2GRAY)
canny=cv2.canny(颜色,20100)
cv2.imshow(“边缘”,canny)
如果cv2.waitKey(25)&0xFF==ord('q'):
cv2.destroyAllWindows()
打破
屏幕记录()
我希望只有一条实线。
如下图所示。
计算机不像人类那样“看”东西!假设你更关心的是检测“道路”,而不是为什么Canny过滤器不能“工作”,我会将红色通道与绿色通道进行比较,这会在道路和草地之间提供非常好的分离(在这种类型的图像中)。e、 g:
img_bgr = cv2.imread('road.png')
delta = img_bgr[:,:,1] - img_bgr[:,:,2]
delta = cv2.blur(delta, (200, 200))
road = delta > 128
给我:
i、 e.True
值(白色)为道路,False
值为草地。这应该比canny的“台词”更容易理解
这当然会在其他地方做一些奇怪的事情,但可能足以让你开始计算机不会像人类那样“看到”事情!假设你更关心的是检测“道路”,而不是为什么Canny过滤器不能“工作”,我会将红色通道与绿色通道进行比较,这会在道路和草地之间提供非常好的分离(在这种类型的图像中)。e、 g:
img_bgr = cv2.imread('road.png')
delta = img_bgr[:,:,1] - img_bgr[:,:,2]
delta = cv2.blur(delta, (200, 200))
road = delta > 128
给我:
i、 e.True
值(白色)为道路,False
值为草地。这应该比canny的“台词”更容易理解
这当然会在其他位置发生奇怪的事情,但可能足以让您开始您可以同时使用打开和关闭操作来过滤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')
输出看起来像
您可以同时使用打开和关闭操作来过滤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')
输出看起来像
什么是“绘图代码”?该图像是由cv2.imwrite('road\u out.png',road.astype(delta.dtype)*255)
生成的,如果这是您的意思的话。否则,您可以使用matplotlib执行plt.imshow(road)
什么是“绘图代码”?该图像是由cv2.imwrite('road\u out.png',road.astype(delta.dtype)*255)
生成的,如果这是您的意思的话。否则,您可以使用matplotlib执行plt.imshow(road)