gpt4 book ai didi

python - OpenCV 中的色 block 检测和标签

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:26 26 4
gpt4 key购买 nike

我有一张城市规划图如下:

Urban Plans

我想检测图像中的色 block 并用不同的土地实用程序标记它们,例如草坪的绿色区域,居住区的粉红色,商业区的浅蓝色等,最后,如果可能的话,从png转换图片到 ArcGis 使用的形状文件。请分享您的想法,谢谢。我已尝试使用 OpenCV Canny 边缘检测,但仍远未满足我的需求:

import cv2
import numpy as np

img = cv2.imread("test.png", 0)

img = cv2.GaussianBlur(img,(3,3),0)
canny = cv2.Canny(img, 50, 150)

cv2.imshow('Canny', canny)
cv2.waitKey(0)
cv2.destroyAllWindows()

Canny edge detection

最佳答案

正如@Micka 所说,您的图像很容易在颜色上分离。我在下面提供了针对深绿色执行此操作的代码。您可以轻松编辑颜色选择器以获得其他颜色。

请注意,您的图像中存在像素瑕疵,这可能是由于压缩所致。目前的结果似乎不错,但我希望你能获得完整质量的图像——这样结果会最好。

图像转换为HSV-colorspace ( image ) 使选择颜色更容易。 ( openCV ) findContours返回一个列表,其中包含找到的每个形状的边界周围的坐标。

我对 shapefile 一无所知,但也许 this可能会有一些用处。

结果:

enter image description here

代码:

# load image
img = cv2.imread("city.png")
# add blur because of pixel artefacts
img = cv2.GaussianBlur(img, (5, 5),5)
# convert to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# set lower and upper color limits
lower_val = (40, 100, 100)
upper_val = (60,255,200)
# Threshold the HSV image to get only green colors
mask = cv2.inRange(hsv, lower_val, upper_val)
# apply mask to original image
res = cv2.bitwise_and(img,img, mask= mask)
#show imag
cv2.imshow("Result", res)
# detect contours in image
im2, contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# draw filled contour on result
for cnt in contours:
cv2.drawContours(res, [cnt], 0, (0,0,255), 2)
# detect edges in mask
edges = cv2.Canny(mask,100,100)
# to save an image use cv2.imwrite('filename.png',img)
#show images
cv2.imshow("Result_with_contours", res)
cv2.imshow("Mask", mask)
cv2.imshow("Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

关于python - OpenCV 中的色 block 检测和标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54051094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com