庭院内部花园检测(cv2)

2024-09-27 17:50:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用篱笆和石头把花园里的草地和外面的草地分开。脚本应该能够绘制第二幅图像上可以看到的红线。 使用cv2应该是可能的

我尝试了一个我在车道检测系统中找到的代码,但不幸的是它对gras不起作用

gray = cv2.cvtColor(gras_image, cv2.COLOR_RGB2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
canny = cv2.Canny(blur, 50, 200)

yard

enter image description here

谢谢你的帮助


Tags: 代码图像脚本系统绘制cv2草地石头
1条回答
网友
1楼 · 发布于 2024-09-27 17:50:01

请参阅下面我的代码中的注释,了解如何在图像中选择您的院子

如果您的院子和非您的院子之间的边界颜色发生变化,这将不是一个可靠的解决方案。通过在GIMP中打开图像,并使用GIMP的颜色选择器工具选择右侧的棕色边框对象,我找到了一个合适的HSV范围。神奇的是,这种颜色也适用于灰色方块。通过使用颜色范围,或者甚至为棕色块和灰色块创建单独的遮罩,您可能会获得更好的效果

import cv2
import numpy as np

#load the image
image = cv2.imread("meadow.jpg")

#define the lower and upper bounds of colors to threshold for in the HSV color space.
hsv_lower = (35//2, 0, 120)
hsv_upper = (45//2, 255, 255)

#convert the image to HSV color space
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

#find the areas of the image corresponding to the colors set above
mask = cv2.inRange(hsv_image, hsv_lower, hsv_upper)

#set the detected areas to white and other areas to black
new_image = np.where(mask, np.uint8(0), np.uint8(255))

#erode to fill in the gaps between the black pixels.
new_image = cv2.erode(new_image, kernel=np.ones((7,7)))

#find connected components (the white areas)
labels, stats = cv2.connectedComponentsWithStats(new_image)[1:3]

#create a mask for the area excluding the largest component
not_my_yard = labels != np.argmax(stats[:,cv2.CC_STAT_AREA])

#set the color of the area excluding the largest component to black
image[not_my_yard] = 0

#save the new image
cv2.imwrite("my_yard.jpg", image)

enter image description here

相关问题 更多 >

    热门问题