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

时间:2019-09-10 13:56:50

标签: python numpy opencv

我有一个非常大的图像,需要在其上绘制约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提供了一个错误:函数正好接受2个参数(给定135个)

1 个答案:

答案 0 :(得分:0)

您试图一次将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)