Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Open CV canny正在检测除边缘以外的所有内容_Python_Opencv - Fatal编程技术网

Python Open CV 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

Canny正在检测除道路外的所有边缘。 这是原始图像。

这是一个示例图像。

我已经试过玩精明的门槛了。 应用高斯滤波,中值滤波,双边滤波

我还尝试先使用黑白图像阈值拟合器,但问题是地形颜色略有变化,这会导致问题

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