导入图像的像素像素协调记录(Python)

时间:2018-07-10 03:27:56

标签: python-3.x csv opencv coordinates calibration

好的,我希望能够记录给定图像中像素的坐标。该图像用于校准和确定不同距离的相机的镜头畸变和iFoV(视场)。

我正在尝试使用Python编写程序,该程序将允许我打开目录中的初始图像,并允许我查明以下区域的像素坐标;

左上,右上,中右,中右,中左,BOT左,BOT MID和BOT右

所以基本上,我需要打开图像,单击那8个点(将这些点记录在csv文件中),然后按一个键,例如“ SPACEBAR”或“ ESC”等将弹出目录中的下一个图像(新长度的工具)。能够重复许多图像。

示例校准工具-红点是所需的共同坐标:

Example Calibration Tool - Red Dots are the Wanted Co-Ordinates

1 个答案:

答案 0 :(得分:0)

我写了一个模拟工具来解决您的目的。

  • filepath中传递适当的路径作为图像。
  • 按下并释放鼠标左键以查看标记。
  • 点击空格键可清除当前图像上的标记(以防万一)。
  • 按小写的“ q”移至下一张图像。

代码:

import cv2
import numpy as np
import glob

ix, iy = -1, -1

# mouse callback function
def draw_circle(event, x, y, flags, param):
    global ix, iy, mode

    if event == cv2.EVENT_LBUTTONDOWN:
        ix, iy = x, y

    elif event == cv2.EVENT_LBUTTONUP:
        cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
        print(x, y)

cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)

filepath = r'C:\Users\Jackson\Desktop\*.png'   
for file in glob.glob(filepath):
    img = cv2.imread(file)
    img2 = img.copy()

    while(1):
        cv2.imshow('image', img)

        k = cv2.waitKey(1) & 0xFF
        if k == 32:                    #--- Press spacebar to clear markings on current image ---
            img = img2.copy()
        elif k == ord('q'):            #--- Press lowercase q to move to next image ---
            break

cv2.destroyAllWindows()