gpt4 book ai didi

python - 获取红色线中的坐标

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

我想获取下图中检测到的红色线条的坐标。但是当我运行下面的代码时,我得到了所有坐标(红色线和其他已识别的对象):

import cv2
import numpy as np
import matplotlib.pyplot as plt

filename = 'detectedRoof.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)

# Threshold for an optimal value, it may vary depending on the image.
img[dst > 0.01*dst.max()] = [255, 0, 0]
cv2.imwrite('outputsimple.jpg', img)

coord = np.where(np.all(img == (255, 0, 0), axis=-1))

lol = zip(coord[0], coord[1])
print(lol)
print ("")

x = np.array(lol, dtype="int")
print (x)

filename1 = open("coordinates_simple.txt", "w")
filename1.write(str(lol))
filename1.close()

plt.scatter(coord[0], coord[1])
plt.show()

输入图像

Original image

谁能帮我只得到红色线条的坐标。

最佳答案

首先,“红”是什么意思?我问是因为自然的红色物体(即角)也总是在绿色和蓝色 channel 中有分量。

其次,您检测灰度图像中的角点,这意味着所有颜色的角点。之后,您将这些对象设置为蓝色像素。

(第三,您是否知道通过设置 img[dst > 0.01*dst.max()] = [255, 0, 0] 您将这些像素设置为蓝色?)

观察这两个问题,我建议修改您各自的代码类似于此(其余部分保持原样):

img = cv2.imread(filename, 1)
b,g,r = cv2.split(img)
gray = np.float32(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))

# detect corners in gray scale image
dst = cv2.cornerHarris(gray, 2, 3, 0.04)

# threshold (red > X, blue and green < Y) such that only reddish corners arec extracted
dst = np.where((dst > 0.01*dst.max()) & (r > 130) & (g < 100) & (b < 100), dst, 0)

这样您将收到所有“带红色”的角。你只需要玩玩这个阈值。

注意这个解决方案相当简单(使用阈值)

关于python - 获取红色线中的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37787933/

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