使用像素坐标在图像上绘制多个标记(OpenCV)

4

我有一张非常大的图片,需要在上面绘制大约130个标记。这些标记的坐标存储在一个numpy数组中,需要使用cv2.drawMarker函数来绘制。

如果这显得太简单了,那么请原谅,因为我正在学习Python。这些标记基于GPS坐标,我已经将这些坐标转换为像素点,并存储在arr中(下面提供了一小部分代码)。图片大小为25000*18568。

    # This file contains the marker locations (pix_lat, pix_long)
    df=pd.read_csv(r'.csv', sep=',',header=0)

    # Image that needs to be drawn on
    img = cv2.imread(r'.jpg',1)

    df1 = df[['pix_lat','pix_long']]
    arr = df1.to_numpy()
    cv2.drawMarker(img, tuple(arr),(0,0,255), markerType=cv2.MARKER_STAR, 
    markerSize=40, thickness=2, line_type=cv2.LINE_AA)
    cv2.imwrite('.jpg',img)

In: arr
Out: array([[14590,  3716],
       [16637,  4148],
       [11074,  6578],
       [17216,  4009],

当前代码在调用cv2.drawMarker函数时出错:该函数要求恰好提供两个参数,但给出了135个参数。

1
我认为你需要为arr的每一对元素调用cv2.drawMarker() - 我不认为你可以一次性传递所有135对坐标。 - Mark Setchell
1个回答

4
您正在尝试一次性传递 135 个元素到 cv2.drawMarker 函数中,这是错误的根源。
您需要循环遍历数组中的每个元素,并为 'arr' 中的每个元素调用 drawMarker 函数。
请参见下方。
# This file contains the marker locations (pix_lat, pix_long)
df=pd.read_csv(r'.csv', sep=',',header=0)

# Image that needs to be drawn on
img = cv2.imread(r'.jpg',1)

df1 = df[['pix_lat','pix_long']]
arr = df1.to_numpy()

#loop through each coordinate pair in arr
for item in arr:
    cv2.drawMarker(img, (item[0], item[1]),(0,0,255), markerType=cv2.MARKER_STAR, 
    markerSize=40, thickness=2, line_type=cv2.LINE_AA)

cv2.imwrite('.jpg',img)


1
这个可行!我使用了“row”而不是“item”,但我认为两种方法都应该有效。由于声望分数较低,我无法为您的帖子点赞。感谢您的帮助! - Saad Malik
@SaadMalik 只是想让你知道,for循环中的“item”变量只是一个引用变量,所以它可以被命名为任何名称,我只是决定称其为item。 - Dylan Freeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接