Python:图像标注工具

  1. 作用:在图像上左键点击,显示红点,并记录点的像素坐标;右键时保存带点的图像并把点击的坐标和坐标总数写入.npy文件。
  2. 目录./imgs存放图像,./outputs存放标注结果。
  3. 类IMG作为传给鼠标回调函数的参数,它的成员data代表图像,name代表标注结果的路径,click_count代表一幅图像上的点数,points代表一幅图像上点的坐标。
#encoding=utf-8
import cv2 as cv
import os
import numpy as np


class IMG:
    data = None
    name = None
    click_count = 0
    points = []


def mouse_event(event, x, y, flags, item):
    if event == cv.EVENT_LBUTTONDOWN:
        cv.circle(item.data, (x, y), 3, (0, 0, 255), 2)
        item.click_count += 1
        item.points.append((x, y))
        cv.imshow(item.name.split('/')[1], item.data)
        cv.waitKey(0)
    elif event == cv.EVENT_RBUTTONDOWN:
        cv.imwrite(item.name + ".jpg", item.data)
        item.points.append(item.click_count)
        np.save(item.name + '_points_' + str(item.click_count) + '.npy', item.points)
        cv.destroyWindow(item.name.split('/')[1])


if __name__ == '__main__':
    imgs_dir = 'imgs/'
    output_dir = 'outputs/'
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)

    img_names = os.listdir(imgs_dir)
    for img_name in img_names:
        img = cv.imread(imgs_dir + img_name)
        item = IMG()
        item.points = []
        item.data = img
        item.name = output_dir + img_name.split('.')[0]
        
        cv.namedWindow(img_name.split('.')[0])
        cv.setMouseCallback(img_name.split('.')[0], mouse_event, item)
        cv.imshow(img_name.split('.')[0], img)
        cv.waitKey(0)

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值